C++:在基类的构造函数中调用重写的方法

C++: call overrided method in base class's constructor

本文关键字:调用 重写 方法 构造函数 基类 C++      更新时间:2023-10-16

假设我有基类a 派生类B。B的构造函数调用A的构造函数,其中我调用一个函数,比如func来做一些类型相关的事情。我的意思是,对于a,我有一个什么都不做的func并且在b中重写了这个方法


我的问题:在B的构造阶段,也就是在A的构造函数中,对象的类型是什么?然而,我认为是a,但我不确定。如果是A,我总是称A为func,对吧?不管我要构造的对象是什么类型。
在VS中,在B的构造函数中,我看到"this"的类型是"B"。当我进入和进入A的构造函数时,我看到了"this"A"的类型。

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

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