我们建议你谨慎调用构造函数中的虚函数。 基类构造函数始终在派生类构造函数之前调用,因此基构造函数中调用的函数是基类版本,而非派生类版本。 在下面的示例中,构造 DerivedClass 会导致执行 print_it() 的 BaseClass 实现早于 DerivedClass 构造函数导致执行 print_it() 的 DerivedClass 实现:
#include <iostream>
using namespace std;
class BaseClass{
public:
BaseClass(){
print_it();
}
virtual void print_it() {
cout << "BaseClass print_it" << endl;
}
};
class DerivedClass : public BaseClass {
public:
DerivedClass() {
print_it();
}
virtual void print_it(){
cout << "Derived Class print_it" << endl;
}
};
int main() {
DerivedClass dc;
}
这是输出:
BaseClass print_it
Derived Class print_it
from https://msdn.microsoft.com/zh-cn/library/s16xw1a8.aspx