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.mzph.cn/news/42425.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

10,遍历任意参

遍历可变参数 遍历可变参数获取可变参数大小通过递归方式遍历可变参数通过可变参数特性来求和 遍历可变参数 #pragma oncetemplate<class ... ParamTypes> void Func(paramTypes &... param) {}可以看作是有一个结构体里面装满了参数&#xff0c;把结构体放到…中。…

Git多版本并行开发实践

本文目的&#xff1a; 实现多个项目同时进行的git多版本管理工作流。 名词解释&#xff1a; feature-XXXX&#xff1a;特性分支指CCS中一个项目或者一个迭代&#xff0c;在该分支上开发&#xff0c;完成后&#xff0c;合并&#xff0c;最后&#xff0c;删除该分支&#xff0c;…

【广州虚拟现实开发】VR智能中控系统进一步提高VR教学管理水平

随着科技的不断发展&#xff0c;虚拟现实(VR)技术已经逐渐走进了人们的生活。在教育领域&#xff0c;VR技术也得到了广泛的应用&#xff0c;尤其是在教学终端中控系统方面。那么&#xff0c;广州华锐互动开发的VR智能中控系统对学校有何益处呢&#xff1f; 首先&#xff0c;VR智…

RocketMQ(模式详解,安装)及控制台安装

下载 环境 64位操作系统&#xff0c;推荐 Linux/Unix/macOS 64位 JDK 1.8下载地址 https://rocketmq.apache.org/zh/download/ RocketMQ 的安装包分为两种&#xff0c;二进制包和源码包。 二进制包是已经编译完成后可以直接运行的&#xff0c;源码包是需要编译后运行的。 单…

LVS负载均衡DR(直接路由)模式

在LVS&#xff08;Linux Virtual Server&#xff09;负载均衡中的DR&#xff08;Direct Routing&#xff09;模式下&#xff0c;数据包的流向如下&#xff1a; 客户端发送请求到负载均衡器&#xff08;LVS&#xff09;的虚拟IP&#xff08;VIP&#xff09;。负载均衡器&#x…

基于C++ 的OpenCV绘制多边形,多边形多条边用不用的颜色绘制

使用基于C的OpenCV库来绘制多边形&#xff0c;并且为多边形的不同边使用不同的颜色&#xff0c;可以按照以下步骤进行操作&#xff1a; 首先&#xff0c;确保你已经安装了OpenCV库并配置好了你的开发环境。 导入必要的头文件&#xff1a; #include <opencv2/opencv.hpp&g…

Bryntum Scheduler Pro 5.5.1 Crack

BRYNTUM 调度程序专业版,专业的日程安排小部件 Bryntum Scheduler Pro 5.5.1 一个专业有大脑的调度UI组件。Scheduler Pro 可帮助您安排任务&#xff0c;同时考虑资源和任务的可用性。 连接您的任务 让 Scheduler Pro 处理剩下的事情。它将根据您定义的链接安排您的任务并遵守任…

BNC连接器市场分析:全球BNC连接器市场规模不断增长

产品定义及统计范围 BNC&#xff08;Bayonet-Neill-Concelman&#xff09;连接器是一种通常用于视频和音频信号传输的电连接器。它是以其两位发明者Paul Neill和Carl Concelman的名字命名的&#xff0c;他们在20世纪40年代末开发了这种连接器。BNC连接器是一种设计用于同轴电缆…

ansible 修改远程主机nginx配置文件

安装ansible brew install ansible 或者 pip3 install ansible 添加远程主机 设置秘钥 mac登录远程主机 ssh -p 5700 root192.168.123.211 ssh localhost #设置双机信任 ssh-kyegen -t rsa #设置主机两边的ssh配置文件 vi /etc/ssh/sshd_config/ PermitRootL…

UniApp 制作高德地图插件

1、下载Uni插件项目 在Uni官网下载Uni插件项目&#xff0c;并参考官网插件项目创建插件项目. 开发者须知 | uni小程序SDK 如果下载下来项目运行不了可以参考下面链接进行处理 UniApp原生插件制作_wangdaoyin2010的博客-CSDN博客 2、引入高德SDK 2.1 在高德官网下载对应SD…

207. 课程表

思路 首先要完全理解题意&#xff0c;这道题的[a,b]并不是b满足了a就可以真正的学习a这门课了&#xff0c;因为a还有可能需要其他选修课的条件。类似下图。   这题的思路在于使用合适的数据结构来存储&#xff0c;这里用hash表来存储如果1这门课可以修了之后&#xff0c;可以…

docker pull 设置代理 centos

On CentOS the configuration file for Docker is at: /etc/sysconfig/docker 用 root 权限打开 text editor sudo gedit 注意 加引号 Adding the below line helped me to get the Docker daemon working behind a proxy server: HTTP_PROXY“http://<proxy_host>:&…

linux下shell编写软件看门狗

遇到一个问题&#xff0c;就是软件崩溃&#xff0c;可以让软件自动重启&#xff0c;而且数据库必须是软件崩溃之前的 #!/bin/sh while true do /app/app/record -qws cp -pr /msata/db/db_record.db /data/log/db_record.db mv /msata/db/db_record1.db /msata/db/db_record.d…

ubuntu20.04磁盘满了 /dev/mapper/ubuntu--vg-ubuntu--lv 占用 100%

问题 执行 mysql 大文件导入任务&#xff0c;最后快完成了&#xff0c;查看结果发现错了&#xff01;悲催&#xff01;都执行了 两天了 The table ‘XXXXXX’ is full &#xff1f; 磁盘满了&#xff1f; 刚好之前另一个 centos 服务器上也出现过磁盘满了&#xff0c;因此&a…

神经网络基础-神经网络补充概念-30-搭建神经网络块

概念 搭建神经网络块是一种常见的做法&#xff0c;它可以帮助你更好地组织和复用网络结构。神经网络块可以是一些相对独立的模块&#xff0c;例如卷积块、全连接块等&#xff0c;用于构建更复杂的网络架构。 代码实现 import numpy as np import tensorflow as tf from tens…

LeetCode 38题:外观数列

题目 给定一个正整数 n &#xff0c;输出外观数列的第 n 项。 「外观数列」是一个整数序列&#xff0c;从数字 1 开始&#xff0c;序列中的每一项都是对前一项的描述。 你可以将其视作是由递归公式定义的数字字符串序列&#xff1a; countAndSay(1) "1"countAnd…

Linux后门大全-inetd后门(一)

环境 靶机&#xff1a;Ubuntu 16.04.7 LTS &#xff08;最好使用相同的版本或更老的版本&#xff0c;inetd是非常老的系统服务管理工具&#xff09; 192.17.0.4 攻击机&#xff1a; 安装inetd apt update apt-get install openbsd-inetd #检查是否安装成功,如果文件存在就安…

【使用群晖远程链接drive挂载电脑硬盘】

文章目录 前言1.群晖Synology Drive套件的安装1.1 安装Synology Drive套件1.2 设置Synology Drive套件1.3 局域网内电脑测试和使用 2.使用cpolar远程访问内网Synology Drive2.1 Cpolar云端设置2.2 Cpolar本地设置2.3 测试和使用 3. 结语 前言 群晖作为专业的数据存储中心&…

《TCP IP网络编程》第十六章

第 16 章 关于 I/O 流分离的其他内容 16.1 分离 I/O 流 「分离 I/O 流」是一种常用表达。有 I/O 工具可区分二者&#xff0c;无论采用哪种方法&#xff0c;都可以认为是分离了 I/O 流。 2次 I/O 流分离&#xff1a; 第一种是第 10 章的「TCP I/O 过程」分离。通 shutdown(soc…

C++STL——deque容器详解

纵有疾风起&#xff0c;人生不言弃。本文篇幅较长&#xff0c;如有错误请不吝赐教&#xff0c;感谢支持。 &#x1f4ac;文章目录 一.deque容器的基本概念二.deque容器常用操作①deque构造函数②deque元素操作③deque赋值操作④deque交换操作⑤deque大小操作⑥deque插入和删除…