当前位置: 首页 > java >正文

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
语法关系嵌套定义独立定义
典型用途逻辑强关联的实现类跨类协作的特殊场景

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

http://www.xdnf.cn/news/3046.html

相关文章:

  • linux使用亚马逊aws-sdk-cpp
  • 适合五一劳动节的SVG模版
  • C++/SDL 进阶游戏开发 —— 双人塔防(代号:村庄保卫战 15)
  • Windows多网卡设置路由冲突的解决
  • 程序员如何用AI工具实现“快速验证原型”
  • Rational Rose显示工具栏及添加工具栏中想要的工具(小人图标,用例图标)
  • 浏览器限制了cookie数量怎么办
  • Educational Codeforces Round 178 (Rated for Div. 2)
  • 什么是单臂路由
  • 制作JDK17 arm64基础镜像,解决字体安装问题
  • 使用Python将大文件夹中的文件分成文件数量相等的小文件夹
  • AI编程工具“幻觉”风险与飞算JavaAl的破局之道
  • 【滑动窗口】最大连续1的个数|将x减到0的最小操作数
  • 消息处理机制 Handler、Looper 和 MessageQueue
  • DeepSeek 联手 Word,开启办公开挂模式
  • windows编译chromium环境配置官方文档说明
  • 信息系统项目管理工程师备考计算类真题讲解十一
  • 什么叫自媒体矩阵营销,多个账号ip关联如何处理
  • MapReduce的shuffle过程详解
  • IIC小记
  • ​Indira量化APP集成IAS 2.0服务器矩阵协议,正式更新上线苹果App Store
  • AI工具 Trae 创建java项目和配置运行环境完整示例
  • java 短信服务
  • 域名与DNS理解
  • 4.2.3 MYSQL事务原理分析
  • 纯C协程框架NtyCo
  • 合并两个有序链表
  • xGAP-200-SE7K-L(300T)测试
  • Git 实操:如何使用交互式 Rebase 移除指定提交(真实案例分享)
  • 公路安全知识竞赛主持稿串词