c++ - 基类成员初始化

标签 c++ class inheritance constructor initialization

为什么以下代码不允许我初始化基类成员:

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/

相关文章:

c++ - for 循环不能正常工作

java - 如何调用我的方法

inheritance - 是否可以在构造函数中使用this.fieldname初始化基类中的字段?

javascript - 在 HOC 中访问 React 组件的功能

c++对象输出错误信息

Java反射获取未知类型子类的声明字段

c++ - 在C++中访问json数组值

c++ - QT C++ - 在线程类中使用 MainWindow 类 QString

javascript - 在 Native Client 和 JavaScript 中访问相同的文件

java - 与Java软件包的混淆