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

时间:2014-05-24 15:39:47

标签: c++ inheritance

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

我该怎么做?

class Base {
private:
  int value;
}

class Derived : public Base {
  ....
}

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

3 个答案:

答案 0 :(得分:6)

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

Base(int v):value(v){};

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

Derived(int v):Base(v){...};

答案 1 :(得分:6)

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

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

答案 2 :(得分:0)

你可以使基类的派生类朋友

class Base
{
friend class Drived;
private:
    int a;
};

class Drived :public Base
{
public:
    Drived(){
        this->a=23;
    }
};

或者使基类的变量受到保护:

class Base
{
protected:
    int a;
};

class Drived :public Base
{
public:
    Drived(){
        this->a=23;
    }
};