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

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.lryc.cn/news/291980.html

相关文章:

  • 《HTML 简易速速上手小册》第2章:HTML 的标签和元素(2024 最新版)
  • 2024斋月大促跨境卖家准备指南
  • 【C++干货铺】哈希结构在C++中的应用
  • 蓝桥杯算法赛第4场小白入门赛强者挑战赛
  • 【每日一题】6.LeetCode——轮转数组
  • Java编程练习之类的封装2
  • Banana Pi BPI-R4开源路由器开发板快速上手用户手册,采用联发科MT7988芯片设计
  • C#使用OpenCvSharp4库中5个基础函数-灰度化、高斯模糊、Canny边缘检测、膨胀、腐蚀
  • 蓝桥杯2024/1/31----第十届省赛题笔记
  • CANopen转Profinet网关实现原理与CANopen主站配置方法
  • Mysql单行函数练习
  • C++ 11新特性之完美转发
  • python222网站实战(SpringBoot+SpringSecurity+MybatisPlus+thymeleaf+layui)-友情链接管理实现
  • 【百度Apollo】探索自动驾驶:深入解析Apollo开放平台架构的博客指南
  • 代理模式详解(重点解析JDK动态代理)
  • 【大厂AI课学习笔记】1.3 人工智能产业发展(2)
  • 【Python】一个简单的小案例:实现将两张图片合并为一张
  • 不同的强化学习模型适配与金融二级市场的功能性建议
  • 【音视频原理】音频编解码原理 ③ ( 音频 比特率 / 码率 | 音频 帧 / 帧长 | 音频 帧 采样排列方式 - 交错模式 和 非交错模式 )
  • spring常用语法
  • 【计算机毕业设计】128电脑配件销售系统
  • 换个思维方式快速上手UML和 plantUML——类图
  • 策略模式+SpringBoot接口,一个接口实现接收的数据自动分流处理
  • P1228 地毯填补问题(葬送的芙蓉王【bushi】)
  • 352. 闇の連鎖(树上差分,LCA)
  • dcat admin + dingo + nginx 开发前台
  • 安卓线性布局LinearLayout
  • Advanced CNN
  • 判断当前设备是不是安卓或者IOS?
  • 使用C++操作Matlab中的mat文件