在构造和析构期间不要调用 virtual 函数
,因为这类调用从不下降至 derived class(比起当前执行构造函数和析构函数的那层)
语法上可以调用。但是实际上你不应该这么做,因为这会违反你的预期。在构造函数和析构函数中调用虚函数,调用的始终是基类的虚函数,不能达到多态的效果。
因为在派生类对象的 base class 构造期间,对象的类型是 base class 而不是 derived class 。
#include<bits/stdc++.h>
using namespace std;
class Base {
public:
Base() { f(); }
virtual void f() { cout << "Base::f()\n"; }
};
class Derived : public Base {
public:
Derived() {}
virtual void f() { cout << "Derived::f()\n"; }
};
int main() {
Base b;
Derived d;
system("pause");
return 0;
}
输出:
Base::f()
Base::f()