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

C++中的内部类

一、内部类的概念

如果一个类定义在另一个类的内部,那么这个类就叫做内部类。(内部类其实和一个独立的类没有区别,只是它会受到外部类访问限定符以及类域的限制,且是外部类的友元)

如果B类是A类的内部类,sizeof(A)的结果与B类无关。

二、内部类的性质

1.内部类受外部类的访问限定符和类域限制

受到访问限定符限制(内部类B是定义在外部类A的私有访问限定符内,不能直接访问内部类)

class A {
private:int _a1 = 1;int _a2 = 1;
private:class B {private: int _b1 = 1;int _b2 = 1;};
};
int main()
{//A::B b1;//编译器报错return 0;
}

受到类域限制(内部类B在实例化对象时受到A类域的限制)

class A {
private:int _a1 = 1;int _a2 = 1;static int _a3;//类内声明
public:class B {private: int _b1 = 1;int _b2 = 1;};
};
int A::_a3 = 1;//类外初始化
int main()
{//B b1;//错误写法A::B b1;//正确写法return 0;
}
2.内部类天生是外部类的友元类

内部类可以访问外部类的私有和保护成员

class A {
private:int _a1 = 1;int _a2 = 1;
private:class B {private: int _b1 = 1;int _b2 = 1;public:void Print(A* ptra){cout << ptra->_a1 << " " << ptra->_a2 << endl;}};
};
3.内部类访问外部类的静态成员时不需要外部类的对象或类名

内部类访问外部类的普通成员时需要通过外部类的对象或者类访问,但是内部类访问外部类的静态成员时可以直接访问,无需外部类对象或者类

class A {
private:int _a1 = 1;int _a2 = 1;static int _a3;//类内声明
private:class B {private: int _b1 = 1;int _b2 = 1;public:void Print(){cout << _a3 << endl;}};
};
int A::_a3 = 1;//类外初始化

 

http://www.lryc.cn/news/313391.html

相关文章:

  • 华为“仓颉”不是中文编程:中文编程早有所属,势如破竹
  • Python的基本数据类型
  • 24考研有感
  • k8s中的PV和PVC存储介绍
  • SpringMVC--03--前端传数组给后台
  • 【C++干货基地】六大默认成员函数: This指针 | 构造函数 | 析构函数
  • 99.qt qml-单例程序实现
  • 【软件工程】可用性测试:提升软件、网站与产品用户体验的关键环节
  • EPLAN的国产平替软件?SuperWORKS自动化版尝鲜
  • 【MySQL 系列】MySQL 架构篇
  • C++初阶:类与对象(初篇)
  • Docker 创建容器并指定时区
  • springboot文件上传修改临时文件路径
  • testvue-新增图表功能(教师那边-后续放到管理员那边)-src/main.js ,router/index.js
  • [HackMyVM]Quick 2
  • Mybatis-Plus实现Service封装
  • 平台工程指南:从架构构建到职责分工
  • Docker系列之docker与docker-compose离线安装
  • css flex 布局换行
  • 使用腾讯云快速搭建WordPress网站流程详解
  • JavaScript发展历史与JavaScript的版本发展
  • 零基础如何系统自学Python
  • 华为OD机试 - 字符串统计(Java 2024 C卷 100分)
  • LeetCode-数组-前缀和-中等难度
  • 【程序人生】探索2024年AI辅助研发趋势
  • 集合框架(一)Collection
  • Android 性能优化--APK加固(2)加密
  • Linux环境下使用interrupt方式操作UART
  • 修改Android打包apk的名字和目录
  • 管理 PostgreSQL 中配置参数的各种方法