当使用"new"为Derived类分配内存时,如何调用Base构造函数?

YNW*_*NWA 1 c++ inheritance

new用来为派生类分配内存,我也想初始化它的基本私有成员

我怎样才能做到这一点?

class Base {
private:
  int value;
}

class Derived : public Base {
  ....
}
Run Code Online (Sandbox Code Playgroud)

任何使用基础构造函数的聪明方法?谢谢!

vso*_*tco 6

Base需要有一个初始化的构造函数value,例如

Base(int v):value(v){};
Run Code Online (Sandbox Code Playgroud)

然后,在Derived构造函数中,您将Base构造函数调用为

Derived(int v):Base(v){...};
Run Code Online (Sandbox Code Playgroud)


jro*_*rok 6

无论是否显式执行,都会在调用大多数派生类的构造函数之前调用基类的构造函数.默认情况下,将调用默认构造函数.如果您想要其他一些行为,请在初始化列表中执行:

class Base { 
protected:
    explicit Base(int) {}
};
class Derived : public Base {
public:
    Derived() : Base(42)  // <-- call to base constructor
    { }
};
Run Code Online (Sandbox Code Playgroud)