C++虛函數(shù)注意事項(xiàng)以及構(gòu)成多態(tài)的條件

C++ 虛函數(shù)對(duì)于多態(tài)具有決定性的作用,有虛函數(shù)才能構(gòu)成多態(tài)。


虛函數(shù)注意事項(xiàng)

  1. 只需要在虛函數(shù)的聲明處加上 virtual 關(guān)鍵字,函數(shù)定義處可以加也可以不加。

  2. 為了方便,你可以只將基類中的函數(shù)聲明為虛函數(shù),這樣所有派生類中具有遮蔽關(guān)系的同名函數(shù)都將自動(dòng)成為虛函數(shù)。

  3. 當(dāng)在基類中定義了虛函數(shù)時(shí),如果派生類沒(méi)有定義新的函數(shù)來(lái)遮蔽此函數(shù),那么將使用基類的虛函數(shù)。

  4. 只有派生類的虛函數(shù)覆蓋基類的虛函數(shù)(函數(shù)原型相同)才能構(gòu)成多態(tài)(通過(guò)基類指針訪問(wèn)派生類函數(shù))。例如基類虛函數(shù)的原型為virtual void func();,派生類虛函數(shù)的原型為virtual void func(int);,那么當(dāng)基類指針 p 指向派生類對(duì)象時(shí),語(yǔ)句p -> func(100);將會(huì)出錯(cuò),而語(yǔ)句p -> func();將調(diào)用基類的函數(shù)。

  5. 構(gòu)造函數(shù)不能是虛函數(shù)。對(duì)于基類的構(gòu)造函數(shù),它僅僅是在派生類構(gòu)造函數(shù)中被調(diào)用,這種機(jī)制不同于繼承。也就是說(shuō),派生類不繼承基類的構(gòu)造函數(shù),將構(gòu)造函數(shù)聲明為虛函數(shù)沒(méi)有什么意義。

  6. 析構(gòu)函數(shù)可以聲明為虛函數(shù),而且有時(shí)候必須要聲明為虛函數(shù)。


構(gòu)成多態(tài)的條件

多態(tài)是指通過(guò)基類的指針既可以訪問(wèn)基類的成員,也可以訪問(wèn)派生類的成員。
下面是構(gòu)成多態(tài)的條件:
1)必須存在繼承關(guān)系;
2)繼承關(guān)系中必須有同名的虛函數(shù),并且它們是覆蓋關(guān)系(函數(shù)原型相同)。
3)存在基類的指針,通過(guò)該指針調(diào)用虛函數(shù)。

轉(zhuǎn)載鏈接:http://c.biancheng.net/view/2296.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容