【04】前向声明、嵌套类、局部类

本文详细介绍了C++中类的前向声明及其使用限制,以及嵌套类的概念、可见性和如何访问内外成员的方法。同时,还提到了局部类的定义和使用注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

版权声明:zhuhurry 未经博主允许不得转载    https://blog.youkuaiyun.com/zhuhurry

一、类的前向声明
    有种特殊情况,当两个类需要相互引用形成一个”环形“引用时,无法先定义使用。 这时候需要用到前向申明,但是前向申明的类不能实例化。
    下面的三个图展现了前向声明的用法和注意的事项:
    
    
    (1)class A;即前向声明了这个A类,此时A类被声明而没有被定义(这种时候称之为前向声明),在声明之后,定义之前,类A是一个不完整类型。系统这个时候知道A是一个类型,但不知道包含哪些成员。不完全类型只能以有限方式使用,不能定义该类型的对象,不完全类型只能用于定义指向该类型的指针及引用,或者用于声明(而不是定义)使用该类型作为形参类型或返回类型的函数。
    (2)我们一般会定义一个前向声明类的指针,并定义一个函数用于对这个指针进行赋值,注意我们不能在cpp文件中使用这个不完整类型
    
二、嵌套类
    所谓嵌套类,就是在类中声明的类。如下代码中,类Inner就是一个嵌套类,类Outer是外围类:
1.作用域
    (1)嵌套类对于外围类的可见性
        ①嵌套类仅仅是声明在外围类内部的类型,而不是外围类的一个成员
        外围类不具备嵌套类所定义的成员,不能通过外围类类对象直接访问嵌套类中的成员,只能通过嵌套类对象来访问嵌套类的成员
        对于外围类来说,嵌套类和其他的类没有任何区别;外围类通过创建嵌套类对象来能访问嵌套类对象的public成员,不能访问嵌套类对象的protected及private成员
    (2)外围类对于嵌套类的可见性
        嵌套类不具备外围类所定义的成员,既不能通过嵌套类对象来访问外围类的成员,只能通过外围类对象来访问外围类的成员
        ②嵌套类能通过嵌套类对象来访问外围类的public成员,不能访问外围类的protected及private成员
        ③嵌套类可以直接引用外围类的静态成员、类型名和枚举成员,即使这些是private的。
    (3)嵌套类对于外围类外部的可见性
        ①不管嵌套类在外围类中被public、protected还是private修饰,对于外围类而言,外围类任何成员都可以访问这个嵌套类
        但是当嵌套类在外围类中被protected和private修饰时,不能被外围类外部访问,当被public修饰时,可通过外围类类名::来访问
2.代码解析
    (1)如何实现嵌套类的成员函数
    (2)外围类外部如何创建一个嵌套类的对象
    (3)嵌套类如何访问外围类中的成员
        难点:对与嵌套类来说,外围类是一个不完整类型。类似前向声明
        把外围类的变量和函数静态化,不管是否被private修饰,嵌套类中都可以直接访问
    
        外围类对于嵌套类来说是一个不完整类型,类似前向声明,只知道有这些一个类型并没有定义,不知道有什么成员变量,可通过参数的指针、引用方式来用外围类的成员变量和函数
        ③下面这种方法,在外围类中创建嵌套类对象,而后通过外围类对象访问嵌套类对象,潜逃类中可计算外围类对象的地址,最后通过该地址访问外围类的中成员。
        
(4)外围类如何访问嵌套类中的成员
    很简单,直接实例化对象而后访问。
    
三、局部类
    一个函数体内定义的类称为局部类。局部类中只能使用它的外围作用域中的对象和函数进行联系,因为外围作用域中的变量与该局部类的对象无关。局部类不能被外部所继承。在定义局部类时需要注意:局部类中不能说明静态成员函数,并且所有成员函数都必须定义在类体内。在实践中,局部类是很少使用的。下面是一个局部类的例子。
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值