如何在 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
广告
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP