为什么以下代码不允许我初始化基类成员:
class A {
public:
int x;
};
class B : public A {
public:
B() : x(0) {} // error
};
而以下内容则是:class A {
public:
int x;
};
class B : public A {
public:
B() { x = 0; } // ok
};
最佳答案
因为基类被视为初始化器列表中的成员。
您可以像这样对B
类型的对象进行图片处理:
class C {
public:
A parent;
};
在此示例中,您将无法初始化
parent.x
,而只能初始化parent
。即使您可以像在体内一样访问和修改主体中的
parent.x
,也无法在初始化列表中访问其成员:C::C() {
parent.x = 5; // Works
}
C::C() : parent.x(5) {} // Won't work
另一方面,如果您有
A
的构造函数,例如A::A(int i): x(i) {}
,您可以在C的初始化程序列表中使用此构造函数:
C::C(): parent(5) {} // Works and does what you want
对于B,您具有相同的选择,但前提是您具有A的构造函数:
B::B(): A(5) {}
关于c++ - 基类成员初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60901018/