哪几种情况必须用到初始化成员列表

scorlw 发布于

哪几种情况必须用到初始化成员列表

c++

(1)类的成员是常量成员初始化;

(2)类的成员是对象成员初始化,而该对象没有无参构造函数。

当调用一个基类的构造函数,而构造函数拥有一组参数时

当调用一个成员类的构造函数,而他拥有一组参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class B
{
protected:
int i;
int j;
public:
B(int x,int y)//屏蔽A类,该处没问题;放开A此处必须给x,y赋初值;
{
i=x;
j=y;
}
};

class A
{
private:
int a;
B b;
public:
A(B b1,int a1)
{
b=b1;
a=a1;
}
};
int main()
{
return 0;
}

通俗的就是,如果基类没有构造函数,派生类的初始化列表必须初始化基类,必须用基类的构造函数构造一个。
因为派生类继承基类时,会先构造基类,然后在构造派生类,如果基类不是默认的构造函数,那么就不知道基类到底咋构造,因此……

(3)类的成员常变量时。

(4)类的成员是引用时。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class B
{
protected:
const int i;
int &j;
public:
//B(int x,int y)
//{
// i=x;
// j=y;
//}
B(int x,int &y):i(x),j(y)
{
}
};

原文地址:https://www.cnblogs.com/bigbigtree/p/3540984.html