天天看點

C++面試題 構造函數調用虛函數

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

#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;

}

運作結果:

C++面試題 構造函數調用虛函數

繼續閱讀