C++类和对象补充

一、构造函数中的函数体赋值和初始化列表

1、函数体内赋值

函数体内赋值中的函数指的是构造函数:
在这里插入图片描述
编译器会在程序执行前通过构造函数,给成员变量一个合适的初始化值。
如果是初始化就会出现一个问题就是,对于初始化而言之需要一次赋初值就可以了,但如果是函数体内赋初值,是可以多次赋值的,那就不符合初始化这个概念了。

2、初始化列表

因为函数体内的赋初值,可以多次赋值,并不符合初始化这个概念,所以就有了初始化列表,当调用构造函数,成员变量赋初值走的是初始化列表那么只会执行一次,所以这样就符合了初始化的概念。
(1)、初始化列表的格式:
在这里插入图片描述
分号:表示第一个成员变量开始走处死话列表
后面的变量用
,逗号隔开

每个成员变量的初始值或表达式用括号()括起来
(2)、初始化列表的特性
初始化列表走的顺序和,在类中声明成员变量的顺序有关,与初始化列表的声明顺序无关;例:
在这里插入图片描述
(3)、初始化列表需要注意的地方
当类中有:
1、引用成员变量
2、const修饰的成员变量
3、自定义类型的成员变量,且没有默认构造函数的时候,

这三类成员变量必须放到初始化列表初始化
在这里插入图片描述

二、explicit关键字

1、explicit的作用

因为单参数的构造函数第一个没有缺省值的构造函数会隐式类型转换
如:

在这里插入图片描述
要是不行这个类隐式类型转换的话,就在这个类的构造函数前面加上explicit关键字就可以限制。
在这里插入图片描述

三、static成员

概念

被statci修饰的类成员,称为类的静态成员;用static修饰的成员变量,称为静态成员变量;用static修饰的成员函数,称为静态成员函数。注意:静态成员变量需要在类外初始化

static成员的特性

1 、静态成员为所有类对象所共享,不属于某个具体的对象,存放在静态区
在这里插入图片描述
2、 静态成员变量必须在类外定义,定义时不添加static关键字,类中只是声明
在这里插入图片描述
3、 类静态成员即可用 类名::静态成员 或者 对象.静态成员 来访问
在这里插入图片描述
4.、静态成员函数没有隐藏的this指针,不能访问任何非静态成员
非静态成员函数:
在这里插入图片描述
静态成员函数:
在这里插入图片描述
5.、静态成员也是类的成员,受public、protected、private 访问限定符的限制
在这里插入图片描述

四、匿名对象

1、创建匿名对象

类名加括号:test1()
在这里插入图片描述

2、匿名对象的特点

1、匿名对象的生命周期只有一行,过了这一行就会调用它的析构函数

五、拷贝对象时编译器的优化

在这里插入图片描述
总结:要是再连续的调用构造函数和拷贝构造函数的话;
如果有构造函数编译器就会优化成构造函数
没有构造函数的,多次的拷贝构造就优化成一次拷贝构造
如果是只有构造函数和赋值重载就不会优化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值