在构造函数中,虚拟机制不会发生作用。因为基类的构造函数在派生类构造函数之前执行,当基类构造函数运行时,派生类的数据成员还没有初始化。如果基类构造期间调用的虚函数向下匹配到派生类,派生类的函数理所当然会涉及到本地数据成员,但是那些数据成员还没有初始化,而调用涉及一个对象还没有初始化的部分自然是危险的,因此虚函数不会向下匹配到派生类,而是直接执行基类的函数。下面通过一个例子来证实:
#include <iostream>
using namespace std;
class A{
public:
A(){dosth();}
virtual void dosth(){cout<<"I am A"<<endl;}
};
class B:public A
{
public:
virtual void dosth(){cout<<"I am B"<<endl;}
};
int main()
{
B b;
return 0;
}
运行结果:
