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