继承时,基类中的变量是否会复制到派生类中? 子类的体系结构如何?
{
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是否会被复制到派生对象实例化中?
派生类(Derived
(不是严格意义上的基类(Base
(。Derived
继承自Base
因此Base
是Derived
的一部分。考虑使用新方法和新成员扩展Derived
Base
。
在您的示例中,Base
有一个默认构造函数,因为第一个参数是可选参数(Base(int id=0)
,您可以在没有任何参数的情况下调用构造函数来id
设置为0
(。
当你使用继承时,Derived
必须始终在Derived
的构造函数中调用Base
的构造函数,然后再执行任何其他操作(以确保Base
的变量被初始化(。但是,由于Base
有一个默认构造函数,因此编译器会神奇地将其设置为可选。
如果要从Derived
的构造函数调用特定Base
的构造函数,可以执行以下操作:
Derived(double cost=0.0) : Base(1 /* or whatever you want it to be */)
{
m_cost = cost;
}