c++ 内部类

一、基本概念

  1. 定义方式‌:在外部类内部定义的独立类,语法上属于外部类成员
  2. 独立性‌:
    • 内部类与外部类无继承关系,不能通过外部类对象直接访问内部类成员
    • 内部类对象必须通过外部类作用域限定符创建(如Outer::Inner obj

二、访问控制特性

  1. 单向友元关系‌:
    • 内部类自动成为外部类的友元,可访问外部类所有成员(包括private)
    • 外部类‌‌具备对内部类的特殊访问权限
  2. 作用域嵌套‌:
    • 内部类可直接访问外部类的static成员和枚举类
    • 访问非static成员需通过外部类对象参数传递
    class Outer {
        static int s_data;
        int m_data;
        class Inner {
            void foo(Outer& o) { 
                cout << s_data;  // 直接访问static成员
                cout << o.m_data; // 通过对象访问非static成员
            }
        };
    };
    

三、应用场景

  1. 实现封装‌:
    • 将仅被外部类使用的辅助类隐藏为private内部类
    • 示例:迭代器模式中,将Iterator作为容器的内部类
  2. 代码组织‌:
    • 减少全局命名空间污染,逻辑相关的类集中管理
  3. 特殊设计‌:
    • 通过private内部类实现"禁止继承"的类(如final效果)

四、注意事项

  1. 内存关系‌:
    • sizeof(外部类)不包含内部类大小,二者内存布局独立
  2. 定义位置‌:
    • 可在外部类外定义内部类成员函数,需用双重作用域限定符
    void Outer::Inner::func() { /*...*/ } 
  3. 模板应用‌:
    • 内部类可配合模板实现元编程辅助类

五、与友元类的区别

特性内部类友元类
访问权限自动获得外部类所有成员访问权需显式声明friend
语法关系嵌套定义独立定义
典型用途逻辑强关联的实现类跨类协作的特殊场景

内部类通过语法嵌套和自动友元特性,在保持封装性的同时提供了更灵活的代码组织方式。实际开发中建议优先用于强关联的辅助类实现,避免过度使用导致结构复杂化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值