喜欢就点个关注丫~
这里所说的“基类的子对象”即基类的数据成员
在C++中,构造函数不能被继承,因此,派生类的构造函数必须通过调用基类的构造函数来初始化基类子对象。
在派生类初始化列表直接初始化基类的成员,被称为“越级初始化”,是会报错的。
举个栗子:
我们先创建一个基类,里面有一个int型子对象
class A{
protected:
int n;//基类的子对象
public:
A();
A(int temp):n(temp){}
};
然后创建一个派生类,并用派生类构造函数的初始化列表来进行“越级初始化”
class B:public A{
public:
B(int temp):n(temp){}//对基类子对象n进行初始化
};
在主函数中调用
int main()
{
B(1);
return 0;
}
结果报错:[Error] class ‘B’ does not have any field named ‘n’
所以越级初始化是不可以的,但是可以“越级赋值”(自造名词哈哈)
class B:public A{
public:
///B(int temp):n(temp){}
///改为
B(int temp){n=temp};
};
这样就可以完美运行了。
因此,派生类的构造函数必须通过调用基类的构造函数初始化基类成员,不能够在派生类初始化列表直接初始化基类的成员