如何在 C++ 构造函数中调用虚函数?


在构造函数或析构函数中调用虚函数很危险,并且应尽可能避免。这是因为您调用的虚函数是从基类而非派生类调用的。

在 C++ 中,每个类在进入其自身构造之前都会构建其版本的虚方法表。因此,在构造函数中对虚拟方法的调用将调用基类的虚拟方法。或者,如果它在那一个层级中没有实现,它将产生一个纯虚拟方法调用。一旦基类完全构造,编译器将开始构建派生类,并覆盖方法指针以指向派生类的实现。因此,例如,如果您有代码 -

示例

#include<iostream>
using namespace std;

class Base {
public:
   Base() { f(); }
   virtual void f() { std::cout << "Base" << std::endl; }
};
class Derived : public Base {
public:
   Derived() : Base() {}
   virtual void f() { std::cout << "Derived" << std::endl; }
};

int main() {
   Derived d;    
   return 0;
}

输出

这将生成以下输出 -

Base

更新日期:2020 年 6 月 24 日

678 次浏览

开启您的职业生涯

完成课程并获得认证

立即开始
广告
© . All rights reserved.