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

C++初阶语法——内部类

前言:内部类,顾名思义是定义在类中的类,许多人会以为它属于外部的类,实际上并不是,它们是两个独立的类,但是内部类受外部类类域的限制。

目录

  • 一.概念
  • 二.特性
    • 1.内部类和外部类相互独立
    • 2.内部类是外部类的友元类
  • 三.举例

一.概念

如果一个类定义在另一个类的内部,这个类就叫做内部类。但是内部类是一个独立的类,它不属于外部的类,更不能通过外部类的对象去访问内部类的成员。外部类对内部类没有任何优越的访问权限。

class A {
public:class B {private:int _b = 2;};
private:int _a = 1;
};int main()
{A aa; //A类实例化对象aa//B bb; //报错,B类受A类类域限制A::B bb; //B类实例化对象bbreturn 0;
}

二.特性

1.内部类可以定义在外部类的public,protected,private都是可以的。
2.注意内部类可以直接访问外部类中的static成员,不需要外部类的对象/类名。
3.sizeof(外部类) = 外部类,和内部类没有任何关系,证明了它们是两个独立的类
4。内部类是外部类的友元类,因而内部类可以通过外部类的对象参数来访问外部类中的所有成员,但是外部类不是内部类的友元。

1.内部类和外部类相互独立

class A {
public:class B {private:int _b = 2;int _c = 3;};
private:int _a = 1;
};int main()
{cout << sizeof(A) << endl;cout << sizeof(A::B) << endl;return 0;
}

控制台输出如下:
在这里插入图片描述
可以看到,B为A的内部类,但是A的内存为4个字节,B的内存为8个字节。说明A和B是独立的类。

2.内部类是外部类的友元类

class A {
public:class B {publicvoid FuncB(){A aa; // 在B类中调用A类aa._a = 2; //访问A类成员变量}private:int _b = 2;};void FuncA() {B bb;// bb._b = 2; A不是B的友元类,不能通过B对象参数访问B中成员}
private:int _a = 1;
};

在这里插入图片描述

三.举例

以牛客网的一个题目(超链接)为例,展示内部类的用处:
在这里插入图片描述

题解:

涉及知识点:构造函数,静态成员,内部类

class Solution {class sum{public:sum()  //构造函数{  _ret += _tmp;_tmp++;}};
public:int Sum_Solution(int n) {sum arr[n];return _ret;}static int _ret; //静态成员变量static int _tmp;
};
int Solution::_ret = 0; //静态成员变量在类外定义初始化
int Solution::_tmp = 1;

文末BB:对哪里有问题的朋友,尽管在评论区留言,若哪里写的有问题,也欢迎朋友们在评论区指出,博主看到后会第一时间确定修改。最后,制作不易,如果对朋友们有帮助的话,希望能给博主点点赞和关注.
在这里插入图片描述

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

相关文章:

  • Java基础(十四)面向对象编程 OOP 多态
  • 【Android】解决Lint found fatal errors while assembling a release target
  • CF1195E OpenStreetMap 题解
  • 微信营销系统如何使用效果会更好
  • Linux开机启动程序添加root权限
  • 安卓13解决链接问题
  • ​《乡村振兴战略下传统村落文化旅游设计 》在2023年畅销榜排名465位
  • 实现一个自动保存高CPU占用现场的简易工具
  • 易服客工作室:如何在WordPress网站中举办虚拟活动
  • Java IO流(一)IO基础
  • 区间覆盖 线段覆盖 二分
  • F#奇妙游(20):主动模式
  • OLED透明屏与传统显示屏的区别:探索未来视觉体验的新里程碑
  • 打开软件提示mfc100u.dll缺失是什么意思?要怎么处理?
  • Python 基础 -- Tutorial(二)
  • 11 迭代器|生成器|协程
  • “第三方支付”详解!
  • Rust之泛型、trait与生命周期
  • GPU Microarch 学习笔记 [1]
  • Transformer(一)简述(注意力机制,NLP,CV通用模型)
  • 回归预测 | MATLAB实现BiLSTM双向长短期记忆神经网络多输入多输出预测
  • 使用Dockker创建vwas容器时报错的解决方法
  • 【数据结构OJ题】链表分割
  • 无感知发布
  • C++ 虚继承
  • git commit用法
  • 【LeetCode】543.二叉树的直径
  • TypeScript教程(五)条件语句,循环,函数
  • vue使用jsplumb 流程图
  • 【BASH】回顾与知识点梳理(二十八)