提问者:小点点

继承时如何构建派生类的变量?


继承时,基类中的变量是否被复制到派生类中? 子类的体系结构如何?

{
public:
 int m_id;

 Base(int id=0)
     : m_id(id)
 {
 }

 int getId() const { return m_id; }
};

class Derived: public Base
{
public:
 double m_cost;

 Derived(double cost=0.0)
     : m_cost(cost)
 {
 }

 double getCost() const { return m_cost; }
};

m_id是否被复制到派生对象的实例化中?


共1个答案

匿名用户

派生类(derived)在严格意义上不是复制基类(base)。 派生的是从继承的,因此派生的的一部分。 想想派生的用新方法和新成员扩展

在您的示例中,base有一个默认的构造函数,因为第一个参数是可选参数(base(int id=0),您可以在没有任何参数的情况下调用构造函数来将id设置为0)。

使用继承时,派生的必须始终在派生的的构造函数中调用的构造函数,然后再执行任何其他操作(以确保的变量已初始化)。 但是,因为base有一个默认的构造函数,所以编译器非常神奇地使它成为可选的。

如果要从派生的构造函数调用特定的的构造函数,可以执行以下操作:

Derived(double cost=0.0) : Base(1 /* or whatever you want it to be */)
{
  m_cost = cost;
}

相关问题