目录
🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉
1.全缺省和半缺省
全缺省:定义函数时,给形参全部初始化。如过调用时不初始化默认使用形参,如果初始化就使用初始化的值。
半缺省:形参部分初始化。
2.初始化列表
初始化列表:每个对象中的成员初始化和定义的地方。
写法:
:开始 ,分割(冒号开始逗号分割)
2.1何时使用
如下👇👇👇
MyQueue类创建对象,然后自动生成默认构造,内置类型不处理(具体看编译器器),自定义类型区调用它的默认构造,但如果我们把Satck类去掉呢?这时候就需要用初始化列表。
内置类型初始化有缺省值 用缺省值
【注意】
1. 每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次)
2. 类中包含以下成员,必须放在初始化列表位置进行初始化:
·引用成员变量
·const成员变量
·自定义类型成员(且该类没有默认构造函数时)
3. 尽量使用初始化列表初始化,因为不管你是否使用初始化列表,对于自定义类型成员变量, 一定会先使用初始化列表初始化。
4. 成员变量在类中声明次序就是其在初始化列表中的初始化顺序,与其在初始化列表中的先后 次序无关
分析:
如题,先声明a2,所以先初始化a2,此时传给a2的值为a1,a1未确定,所以a2为随机值;
然后初始化a1,a的值为1传给a1,所以a1为1
exlicit关键词
用explicit修饰构造函数,将会禁止构造函数的隐式转换。
3.友元函数
突破类域的限定访问符的方式
友元提供了一种突破封装的方式,有时提供了便利。但是友元会增加耦合度,破坏了封装,所以 友元不宜多用。
友元分为:友元函数和友元类
3.1友元函数
友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在 类的内部声明,声明时需要加friend关键字。
说明:
友元函数可访问类的私有和保护成员,但不是类的成员函数
友元函数不能用const修饰
友元函数可以在类定义的任何地方声明,不受类访问限定符限制
一个函数可以是多个类的友元函数
友元函数的调用与普通函数的调用原理相同
3.2友元类
如图👆👆👆
Date类可以访问Time的私有
3.3内部类
3.3.1嵌套类的大小
先看一题👇👇👇
解析:
·答案是4,在类A中,satic在数据段,不在类中,只有int h
·B天生就是A的友缘,B能访问A的数据
·A 和 B是俩平行的类,你是你,我是我,B嵌套在A,A里面没有B,只是受到类域限制。
调用B的时候只能 A::B b1
4.匿名函数
如下👇👇👇
5.连续构造详解
构造函数和拷贝构造可以简化
拷贝构造和拷贝构造可以简化
优化是编译器做的。
如图👆👆👆
要想返回aa需要拷贝构造临时对象,临时对象再拷贝构造给ret,
但编译器会优化这种连续构造,如右侧图,优化为直接构造
6.作业题
🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉
last but not least,创作不易,望读者三连三连三连支持💖
重要的事情说三遍💖