我們知道:C++中的多態使得可以根據對象的真實類型(動態類型)調用不同的虛函數。這種調用都是對象已經構建完成的情況。那如果在構造函數中調用虛函數,會怎么樣呢?
有這么一段代碼:
class A{public: A ():m_iVal(0){test();} virtual void func() { std::cout<<m_iVal<<‘ ';} void test(){func();}public:int m_iVal;};class B : public A{public: B(){test();}; virtual void func() { ++m_iVal; std::cout<<m_iVal<<‘ ';}};int main(int argc ,char* argv[]){ A*p = new B; p->test(); return 0;}
輸出: 0 1 2
也就是說,在構造函數中調用虛函數,調用的是正在構造的類中的虛函數,而不是子類的虛函數。
理一下程序。new了一個B對象,首先要調用基類構造函數,也就是A類的構造函數。調用test(),再調用虛函數func(),這時候用的是基類版本。之后再調用子類B的構造函數,這時調用的是子類虛函數func()。至于最后一次調用func(),根據多態,調用的是真實虛函數。
以上就是小編為大家帶來的c++ 構造函數中調用虛函數的實現方法全部內容了,希望大家多多支持武林網~
新聞熱點
疑難解答
圖片精選