【问题标题】:C++: call overrided method in base class's constructor [duplicate]C ++:在基类的构造函数中调用重写方法[重复]
【发布时间】:2017-02-04 12:47:43
【问题描述】:

假设我有一个基类A和一个派生类B。 B 的构造函数调用 A 的构造函数,在其中我调用一个函数,比如 func 来做一些与类型相关的事情。我的意思是,我对 A 有一个无操作 func 并在 B 中覆盖此方法。

我的问题:
在 B 的构造阶段,即 A 的构造函数中,对象的类型是什么?虽然,我认为是A。但我不确定。如果是 A,我总是打电话给 A 的func 对吗?无论我要构造的对象的类型如何。
在VS中,在B的构造函数中,我看到“this”的类型是“B”。当我进入 A 的构造函数时,我看到了“this”“A”的类型。

【问题讨论】:

标签: c++


【解决方案1】:

这是正确的。首先构造超类。派生类只有在超类被构造后才会被构造。在构造超类A 之前,它的任何虚方法都不会被覆盖,调用它们将调用A 的虚方法。如果它们是纯的且未定义,则会导致未定义的行为。

【讨论】:

  • 好答案,但超类和派生?不是超类和子类,还是基类和派生?来吧,这就像在条纹衬衫上系条纹领带。
  • 更像是商务衬衫搭配蓝色紧身连衣裤搭配红色和金色大 S。
【解决方案2】:

好吧,这并不重要,只要控制在 B 的构造函数中,代码就会按照 B 的可见性执行,如果你在 B 的构造函数中调用了你的 func,B 中被覆盖的 func 是可见的,因此 B 的 func 被执行,现在在A 的构造函数 A 的 func 是可见的,因此 A 的 func 将被执行。

【讨论】:

    猜你喜欢
    • 2010-09-25
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    • 1970-01-01
    • 2014-07-26
    • 2010-10-12
    • 2020-09-22
    • 1970-01-01
    相关资源
    最近更新 更多