c++ 構(gòu)造函數(shù)中調(diào)用虛函數(shù)的實(shí)現(xiàn)方法
我們知道:C++中的多態(tài)使得可以根據(jù)對(duì)象的真實(shí)類(lèi)型(動(dòng)態(tài)類(lèi)型)調(diào)用不同的虛函數(shù)。這種調(diào)用都是對(duì)象已經(jīng)構(gòu)建完成的情況。那如果在構(gòu)造函數(shù)中調(diào)用虛函數(shù),會(huì)怎么樣呢?
有這么一段代碼:
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
也就是說(shuō),在構(gòu)造函數(shù)中調(diào)用虛函數(shù),調(diào)用的是正在構(gòu)造的類(lèi)中的虛函數(shù),而不是子類(lèi)的虛函數(shù)。
理一下程序。new了一個(gè)B對(duì)象,首先要調(diào)用基類(lèi)構(gòu)造函數(shù),也就是A類(lèi)的構(gòu)造函數(shù)。調(diào)用test(),再調(diào)用虛函數(shù)func(),這時(shí)候用的是基類(lèi)版本。之后再調(diào)用子類(lèi)B的構(gòu)造函數(shù),這時(shí)調(diào)用的是子類(lèi)虛函數(shù)func()。至于最后一次調(diào)用func(),根據(jù)多態(tài),調(diào)用的是真實(shí)虛函數(shù)。
以上就是小編為大家?guī)?lái)的c++ 構(gòu)造函數(shù)中調(diào)用虛函數(shù)的實(shí)現(xiàn)方法全部?jī)?nèi)容了,希望大家多多支持腳本之家~
相關(guān)文章
使用pybind11封裝C++結(jié)構(gòu)體作為參數(shù)的函數(shù)實(shí)現(xiàn)步驟
這篇文章主要介紹了用pybind11封裝C++結(jié)構(gòu)體作為參數(shù)的函數(shù)實(shí)現(xiàn)步驟,本文分步驟通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02C++實(shí)現(xiàn)學(xué)生選課系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)學(xué)生選課系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02C++語(yǔ)言設(shè)計(jì)實(shí)現(xiàn)五子棋
這篇文章主要為大家詳細(xì)介紹了C++語(yǔ)言設(shè)計(jì)實(shí)現(xiàn)五子棋,包括數(shù)據(jù)結(jié)構(gòu)和對(duì)象設(shè)計(jì)及主函數(shù)調(diào)用實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-09-09VC使用編譯時(shí)間作為版本號(hào)標(biāo)識(shí)的方法
這篇文章主要介紹了VC使用編譯時(shí)間作為版本號(hào)標(biāo)識(shí)的方法,需要的朋友可以參考下2017-03-03C語(yǔ)言開(kāi)發(fā)實(shí)現(xiàn)井字棋及電腦落子優(yōu)化示例詳解
以前上課經(jīng)常和同桌玩起井字棋,那么我們就當(dāng)我們回憶童年,現(xiàn)在也用C語(yǔ)言來(lái)實(shí)現(xiàn)井字棋,本次代碼相對(duì)于初階的井字棋,在電腦下棋代碼部分做了優(yōu)化,使得電腦更加具有威脅2021-11-11對(duì)C++默認(rèn)構(gòu)造函數(shù)的一點(diǎn)重要說(shuō)明
下面小編就為大家?guī)?lái)一篇對(duì)C++默認(rèn)構(gòu)造函數(shù)的一點(diǎn)重要說(shuō)明。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-12-12c++標(biāo)準(zhǔn)庫(kù)讀寫(xiě)ini文件的實(shí)現(xiàn)示例
本文介紹了一個(gè)完整的INI文件類(lèi)的實(shí)現(xiàn),包含讀取和寫(xiě)入操作,通過(guò)IniFile.h頭文件和IniFile.cpp實(shí)現(xiàn)文件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-10-10