c++ 構造函數(shù)中調用虛函數(shù)的實現(xiàn)方法
我們知道:C++中的多態(tài)使得可以根據(jù)對象的真實類型(動態(tài)類型)調用不同的虛函數(shù)。這種調用都是對象已經(jīng)構建完成的情況。那如果在構造函數(shù)中調用虛函數(shù),會怎么樣呢?
有這么一段代碼:
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
也就是說,在構造函數(shù)中調用虛函數(shù),調用的是正在構造的類中的虛函數(shù),而不是子類的虛函數(shù)。
理一下程序。new了一個B對象,首先要調用基類構造函數(shù),也就是A類的構造函數(shù)。調用test(),再調用虛函數(shù)func(),這時候用的是基類版本。之后再調用子類B的構造函數(shù),這時調用的是子類虛函數(shù)func()。至于最后一次調用func(),根據(jù)多態(tài),調用的是真實虛函數(shù)。
以上就是小編為大家?guī)淼腸++ 構造函數(shù)中調用虛函數(shù)的實現(xiàn)方法全部內容了,希望大家多多支持腳本之家~
相關文章
使用pybind11封裝C++結構體作為參數(shù)的函數(shù)實現(xiàn)步驟
這篇文章主要介紹了用pybind11封裝C++結構體作為參數(shù)的函數(shù)實現(xiàn)步驟,本文分步驟通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2020-02-02C語言開發(fā)實現(xiàn)井字棋及電腦落子優(yōu)化示例詳解
以前上課經(jīng)常和同桌玩起井字棋,那么我們就當我們回憶童年,現(xiàn)在也用C語言來實現(xiàn)井字棋,本次代碼相對于初階的井字棋,在電腦下棋代碼部分做了優(yōu)化,使得電腦更加具有威脅2021-11-11