1.为什么需要初始化列表?原因:当一个类B中的一个成员变量是另一个类A对象a时,A只有一个带参数的构造函数,而没有无参的构造函数时,编译器无法完成对a的初始化。
2.初始化与赋值概念区别:初始化时当前对象正在被创建,赋值表示一个对象已经创建完成。
如1:类对象初始化会调用构造函数或拷贝构造函数,而赋值是调用的却是=运算符重载函数。
如2:const关键字修饰的变量就只能在初始化时候获得数据,不可以被赋值。所以当类成员中含有const常量时,必须要在初始化列表中完成初始化,不可以在构造函数中赋值。
3.初始化列表用法
#include <iostream>
using namespace std;
class A
{
public:
A(int a)
{
this->a_ = a;
}
private:
int a_;
};
class B
{
public:
B(int b) :a_(10),a1_(20),c_(30)//没有初始化列表时,编译报错,没有合适的默认构造函数可用
{
this->b_ = b;
}
private:
int b_;
const c_;//只能在初始化列表中完成初始化
A a_;//先声明的对象的构造函数会先被调用,与初始化列表中的书写顺序无关
A a1_;
};
int main()
{
B b(10);
cin.get();
return 0;
}