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