如何用 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

更新于:24-6 月-2020

680 次浏览

职业之路从这里扬帆启航

通过完成课程取得认证

开始
广告
© . All rights reserved.