【问题标题】: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++ oop inheritance


【解决方案1】:

派生类 (Derived) 并不是严格意义上的复制基类 (Base)。 Derived 继承自 Base,因此 BaseDerived 的一部分。想想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 它们是同一个对象,所以它们当然有相同的地址。为简化起见,基本成员基本上存在于内存中派生成员的“上方”,但它们是派生对象的一部分。
猜你喜欢
  • 2016-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-19
  • 1970-01-01
  • 2011-10-26
  • 1970-01-01
  • 2013-04-10
相关资源
最近更新 更多