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;

}

運行結果:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章