我正在使用new
为派生类分配内存,
我还想初始化它的基本私有成员
我该怎么做?
class Base {
private:
int value;
}
class Derived : public Base {
....
}
使用基础构造函数的任何聪明方法? 谢谢!
答案 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;
}
};