目录
01-C++类的初始化列表的概要介绍
在C++中,类的初始化列表是一个在构造函数体之前用来初始化类成员的机制。它允许你在构造函数的声明部分直接初始化成员变量,而不是在构造函数体内通过赋值的方式。
语法
初始化列表紧跟在构造函数名称之后,用冒号 :
开始,后面跟着成员变量的初始化。每个成员变量通过逗号 ,
分隔。
class ClassName {
public:
// 构造函数带有初始化列表
ClassName(int a, int b) : x(a), y(b) {
// x和y分别通过初始化列表初始化
// 其他构造函数体代码(如果有)
}
private:
int x, y;
};
其中x(a)
的意思并不是调用名叫x的函数,而是把成员变量x的值初始化a的值。同样,y(b)
的意思也并不是调用名叫y的函数,而是把成员变量y的值初始化为b的值。
为什么使用初始化列表?
- 提高效率:通过初始化列表可以直接初始化类成员,而不是先调用默认构造函数再进行赋值操作。
- 有一些成员变量只能在初始化列表中进行初始化,具体如下:
①常量成员和引用成员:常量成员变量和引用成员必须通过初始化列表来初始化,因为它们无法在构造函数体内被赋值。至于为什么,请往后看,我在后面说明了原因。
②如果类型为类类型的成员变量【即某个类的实例对象】没有默认构造函数,也需要在初始化列表中进行初始化。关于什么叫默认构造函数,请看我的另一篇博文 [https://blog.youkuaiyun.com/wenhao_ir/article/details/145428240] - 如果一个类的基类没有使用默认构造函数,也需要在初始化列表进行初始化。关于什么叫默认构造函数,请看我的另一篇博文 https://blog.youkuaiyun.com/wenhao_ir/article/details/145428240
示例代码
#include <iostream>
using namespace std;
class Rectangle {
public:
// 带有初始化列表的构造函数
Rectangle(int l, int w) : length(l), width(w) {
// 构造函数体
cout << "Rectangle