在構造函數中,虛擬機制不會發生作用。因爲基類的構造函數在派生類構造函數之前執行,當基類構造函數運行時,派生類的數據成員還沒有初始化。如果基類構造期間調用的虛函數向下匹配到派生類,派生類的函數理所當然會涉及到本地數據成員,但是那些數據成員還沒有初始化,而調用涉及一個對象還沒有初始化的部分自然是危險的,因此虛函數不會向下匹配到派生類,而是直接執行基類的函數。下面通過一個例子來證實:
#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;
}
運行結果: