C++初阶 类和对象(补充)

目录

一、友元

1.1什么是友元?

1.2如何使用友元?

1.3使用友元

1.4使用友元注意事项

 二、初始化列表

2.1什么是初始化列表?

2.2为什么要有初始化列表?

2.3使用初始化列表

2.4注意事项


一、友元

1.1什么是友元?

友元是一种用来突破封装的手段,使用友元可以访问到被封装的数据

1.2如何使用友元?

比方说,我有一个类叫A,它有一个成员为int _a;而这个成员我把它封装到private中了,那么在类外面显然是不能够正常访问到_a这个变量的,但是我们可以通过友元访问到,在类里面输入这串代码:friend+需要访问私有成员的函数名,之后这个函数便可以在类外面访问到A这个类的私有成员

1.3使用友元

正常情况下我们想直接拿到A中的_a编译器便直接报错了

可以看出,使用友元建立链接之后test便可以直接访问到A这个类中的_a

1.4使用友元注意事项

(1)友元函数可访问类的私有和保护成员,但不是类的成员函数
(2)友元函数不能用const修饰
(3)友元函数可以在类定义的任何地方声明,不受类访问限定符限制
(4)一个函数可以是多个类的友元函数
(5)友元函数的调用与普通函数的调用原理相同

 二、初始化列表

2.1什么是初始化列表?

初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括号中的初始值或表达式。如此便可以初始化对应类的成员变量

2.2为什么要有初始化列表?

其实之所以要有初始化列表是因为构造函数直接写入无法定义const,引用这些一定义就必须要初始化的变量

2.3使用初始化列表

不使用初始化列表无法初始化const变量

使用初始化列表便可以解决这一问题 

 

2.4注意事项

(1) 每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次)
(2)类中包含以下成员,必须放在初始化列表位置进行初始化:引用成员变量,const成员变量,自定义类型成员(且该类没有默认构造函数时)

(3)尽量使用初始化列表初始化,因为不管你是否使用初始化列表,对于自定义类型成员变量,一定会先使用初始化列表初始化

(4)成员变量在类中声明次序就是其在初始化列表中的初始化顺序,与其在初始化列表中的先后次序无关

第四点验证: 

#include<iostream>
using namespace std;
class A
{
public:A():_a(666), _b(_a),_c(10){}void Print(){cout<<_a<<" "<<_b<<" "<<_c<< endl;}
private:int _b;int _a;const int _c;
};
int main() 
{A a1;a1.Print();
}

可以看出,如果是根据初始化列表的顺序进行初始化,那么输出的值应该是666,666,10

实际上为666,随机值,10,这是因为编译器先定义_b,再定义_a,最后定义_c

 调换一下_b和666的位置,果然输出666 666 10

综上所述可以证明 成员变量在类中声明次序就是其在初始化列表中的初始化顺序,与其在初始化列表中的先后次序无关

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/660794.shtml

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

相关文章

大数据知识图谱之深度学习——基于BERT+LSTM+CRF深度学习识别模型医疗知识图谱问答可视化系统

文章目录 大数据知识图谱之深度学习——基于BERTLSTMCRF深度学习识别模型医疗知识图谱问答可视化系统一、项目概述二、系统实现基本流程三、项目工具所用的版本号四、所需要软件的安装和使用五、开发技术简介Django技术介绍Neo4j数据库Bootstrap4框架Echarts简介Navicat Premiu…

Windows Server 2003 DNS服务器搭建

系列文章目录 目录 系列文章目录 文章目录 前言 一、DNS服务器是什么&#xff1f; 二、配置服务器 1.实验环境搭建 2.服务器搭建 3)安装Web服务器和DNS服务器 4)查看安装是否成功 5)这里直接配置DNS服务器了,Web服务器如何配置我已经发布过了 文章目录 Windows Serve…

长时间佩戴骨传导耳机会损害听力吗?骨传导耳机有什么优点?

如果是正常的使用&#xff0c;是不会对损伤听力的&#xff0c;如果错误的使用&#xff0c;比如说高音量使用&#xff0c;长时间也会出现一定的危害&#xff0c;而且骨传导耳机相比于传统耳机&#xff0c;其优点也要多一些&#xff0c;下面一起看下骨传导耳机都有哪些优点吧。 佩…

iOS 文件分割保存加密

demo只是验证想法&#xff0c;没有做很多异常处理 默认文件是大于1KB的&#xff0c;对于小于1KB的没有做异常处理demo中文件只能分割成2个&#xff0c;可以做成可配置的N个文件分割拼接还可以使用固定的二进制数据&#xff0c;拼接文件开头或结尾 不论哪种拼法&#xff0c;目的…

redis下载与安装教程(centos下)

文章目录 一&#xff0c;redis下载1.1上传到linux服务器上 二&#xff0c;redis安装2.1 安装依赖2.2 解压包2.3 编译并安装2.4 指定配置启动2.5 设置redis开机自启 一&#xff0c;redis下载 官网&#xff1a; https://redis.io1.1上传到linux服务器上 我用filezila上传到/us…

AUTOSAR内存篇 -FlashDriver(Fls)

文章目录 简介功能介绍通用设计规则外部闪存驱动加载,执行和移除闪存访问代码API介绍类型定义Fls_ConfigTypeFls_AddressTypeFls_LengthType函数定义Fls_InitFls_EraseFls_WriteFls_Cancel

LabVIEW核能设施监测

LabVIEW核能设施监测 在核能领域&#xff0c;确保设施运行的安全性和效率至关重要。LabVIEW通过与硬件的紧密集成&#xff0c;为高温气冷堆燃料装卸计数系统以及脉冲堆辐射剂量监测与数据管理系统提供了解决方案。这些系统不仅提高了监测和管理的精确度&#xff0c;也保证了核…

【编程语言】头文件、源文件、资源文件

头文件、源文件、资源文件是软件开发中常见的文件类型&#xff0c;用于组织和管理代码和资源。 •头文件&#xff08;Header File&#xff09; 是一种包含函数声明、宏定义、类型定义等信息的文件&#xff0c;在源文件中通过#include指令将头文件包含进来&#xff0c;以便能够使…

实时嵌入式:无限阻塞

无限阻塞是指任务在等待某些条件满足时&#xff0c;永远无法继续执行。在多任务或多线程操作系统中&#xff0c;无限阻塞是一个常见问题&#xff0c;可以由多种原因造成。 常见原因 死锁&#xff1a;死锁是指两个或多个任务相互等待对方持有的资源而无法继续执行。在这种情况…

Solidworks 与 MATLAB 联合仿真

本文主要讲解了“MATLAB与SolidWorks的联合仿真怎么实现”&#xff0c;文中的讲解内容简单清晰&#xff0c;易于学习与理解&#xff0c;下面请大家跟着小编的思路慢慢深入&#xff0c;一起来研究和学习“MATLAB与SolidWorks的联合仿真怎么实现”吧&#xff01; 下载插件。 1、…

Pyth 预言机: 它们如何影响Hover?

所有链上借贷市场都使用一种称为“oracle&#xff08;预言机&#xff09;”的服务&#xff0c;为dApp提供代币定价。Oracle是一个数据系统&#xff0c;将链下信息&#xff08;例如KuCoin上的BTC/USDT价格&#xff09;传递到链上合约。从那里&#xff0c;应用程序可以支付一小笔…

react 之 UseMemo

useMemo 看个场景 下面我们的本来的用意是想基于count的变化计算斐波那契数列之和&#xff0c;但是当我们修改num状态的时候&#xff0c;斐波那契求和函数也会被执行&#xff0c;显然是一种浪费 // useMemo // 作用&#xff1a;在组件渲染时缓存计算的结果import { useState …

C#中的WebApi响应Accept头,自动返回xml或者json

Global.asax.cs中的Application_Start方法添加 GlobalConfiguration.Configuration.Formatters.Clear(); GlobalConfiguration.Configuration.Formatters.Add(new XmlMediaTypeFormatter()); GlobalConfiguration.Configuration.Formatters.Add(new JsonMediaTypeFormatter())…

红队渗透靶机:LEMONSQUEEZY: 1

目录 信息收集 1、arp 2、nmap 3、nikto 4、whatweb 目录扫描 1、dirsearch 2、gobuster WEB phpmyadmin wordpress wpscan 登录wordpress 登录phpmyadmin 命令执行 反弹shell 提权 get user.txt 信息收集 本地提权 信息收集 1、arp ┌──(root㉿ru)-[~…

进程间通讯方式

管道: mkfifo 和匿名管道。主要在父子进程上面进行进程间通信比较方便。实际上存储在内核缓存区里面。 无论是匿名管道,还是命名管道,在内核都是一个文件。只要是文件就要有一个 inode。这里我们又用到了特殊 inode、字符设备、块设备,其实都是这种特殊的 inode。 在这种…

CANoe64.exe - 系统错误 找不到VCRUNTIME140_ 1.dll

环境&#xff1a; CANoe12 Win10 专业版 问题描述&#xff1a; CANoe64.exe - 系统错误 找不到VCRUNTIME140_ 1.dll 解决方案&#xff1a; VCRUNTIME140_1.dll是Microsoft Visual C Redistributable for Visual Studio 2015的一部分。它是一个动态链接库&#xff08;DLL&a…

算法价值3-贪心算法

目录 例子1&#xff1a; 问题描述&#xff1a; 算法步骤&#xff1a; 代码&#xff1a; 结果&#xff1a; 例子2&#xff1a; 问题描述&#xff1a; 算法步骤&#xff1a; 代码&#xff1a; 结果&#xff1a; 结论&#xff1a; 贪心算法&#xff08;Greedy Algorith…

响应标头Allow-Headers和Expose-Headers的区别和用法

Access-Control-Allow-Headers和Access-Control-Expose-Headers&#xff0c;简单的说&#xff0c;这两者都是前端和后端之间通过header传递数据的&#xff0c;主要的区别就是方向。 Access-Control-Allow-Headers 举个例子&#xff0c;如果我们前端向后端发起请求&#xff0c…

[网络安全]IIS---FTP服务器 、serverU详解

一 . FTP服务器(File Transfor Protocol) : 协议:文件传输协议 端口号:TCP: 20(数据) / 21(控制) 二 . FTP工作方式: 1.主动模式 : (FTP服务器21端口与FTP客户端产生的随机端口先建立连接 建立连接后,再使用FTP服务器21端口与FTP客户端创建的一个新的随机端口进行发送…

ElementUI安装与使用指南

Element官网-安装指南 提醒一下&#xff1a;下面实例讲解是在Mac系统演示的&#xff1b; 一、开发环境配置 电脑需要先安装好node.js和vue2或者vue3 安装Node.js Node.js 中文网 安装node.js命令&#xff1a;brew install node node.js安装完后&#xff0c;输入&#xff1…