派生过程中形成的未命名对象



抽象类,即至少有一个纯虚函数的类不允许对象实例化。但是,当从抽象类派生一个具体类并定义所有纯虚函数时,可以实例化该类的对象。

但是当创建派生对象时,首先必须创建一个未命名的基类对象。这是怎么发生的?我的意思是,如果不允许创建,如何创建这个未命名的抽象基类对象。

这就像说人类的心脏不能存在,因为它需要人类。但是当我们创造一个人的时候,我们必须首先创造心脏,但是当心脏离开人类就无法存在时,我们如何创造心脏呢?

答案是,因为我们将它们创建在一起,它们都是单个实体的一部分。
心与人是一起被创造的。
在构造函数完全完成之前,没有对象实际存在,此时心脏和人类作为单个对象存在。

你混淆了"不可能"one_answers"不允许"。当然,抽象类的实例化对于编译器来说是可能的;只是不允许编程

当创建派生对象时,首先创建一个未命名的基类对象待创建。这是怎么发生的?

IMO, 基类对象不是按照我们看到的方式创建的。是的,我们确实在基类中提供构造函数和方法等,但它们仅仅是初始化/赋值的工具。

实际上,派生类继承了它的基类部分,所以最终我们只是创建了派生类对象。类比的例子:

struct B {
  int b;
  virtual void foo() = 0;
};
struct D : B {
  int d;
  virtual void foo () {}
};

创建对象时,编译器将D视为

struct D {
  int b,d;
  virtual void foo () {}
};

它看到D满足了能够实例化对象的所有条件,并且它创建了对象

最新更新