继承时,基类中的变量是否被复制到派生类中? 子类的体系结构如何?
{
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
)。 派生的
是从基
继承的,因此基
是派生的
的一部分。 想想派生的
用新方法和新成员扩展基
。
在您的示例中,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;
}