继承时派生类的变量是如何构建的?
Posted
技术标签:
【中文标题】继承时派生类的变量是如何构建的?【英文标题】:How the variables of derived class are built when inheriting? 【发布时间】:2020-06-30 13:43:41 【问题描述】:继承时,基类中的变量是否会复制到派生类中?子类的架构会是怎样的?
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会被复制到派生中吗?
【问题讨论】:
没有任何东西被“复制”到任何地方。基类是派生类的一部分。 这能回答你的问题吗? C++: Construction and initialization order guarantees @underscore_d 是的,它很有用,但我仍然没有得到适当的答案,谢谢 【参考方案1】:派生类 (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;
【讨论】:
那么 Derived 类如何与基础部分一起存储在内存中?因为在 Derived 对象实例化时,如果您尝试在其构造函数中打印对象 Base 的地址(std::cout @slahOmar 它们是同一个对象,所以它们当然有相同的地址。为简化起见,基本成员基本上存在于内存中派生成员的“上方”,但它们是派生对象的一部分。以上是关于继承时派生类的变量是如何构建的?的主要内容,如果未能解决你的问题,请参考以下文章