2 回答

TA貢獻(xiàn)1817條經(jīng)驗 獲得超6個贊
C++中虛函數(shù)的作用:
1、為了方便使用多態(tài)特性,我們常常需要在基類中定義虛擬函數(shù)。
2、在很多情況下,基類本身生成對象是不合情理的。例如,動物作為一個基類可以派生出老虎、孔雀等子類,但動物本身生成對象明顯不合常理。
為了解決上述問題,引入了純虛函數(shù)的概念,將函數(shù)定義為純虛函數(shù)(方法:virtual ReturnType Function()= 0;),則編譯器要求在派生類中必須予以重寫以實現(xiàn)多態(tài)性。
同時含有純虛擬函數(shù)的類稱為抽象類,它不能生成對象。這樣就很好地解決了上述兩個問題。
C++中虛函數(shù)的用法:
比如你有個游戲,游戲里有個虛基類叫「怪物」,有純虛函數(shù) 「攻擊」。然后派生出了三個子類「狼」「蜘蛛」「蟒蛇」,都實現(xiàn)了自己不同的「攻擊」函數(shù),比如狼是咬人,蜘蛛是吐絲,蟒蛇把你纏起來。
然后出現(xiàn)好多怪物的時候就可以定義一個 虛基類指針數(shù)組,把各種怪物的指針給它,然后迭代循環(huán)的時候直接 monster[i]->attack() 攻擊玩家就行了,大概見下圖:
擴(kuò)展資料:
使用虛函數(shù)的注意事項:
一、包含虛函數(shù)的類指針列表會增大。
二、虛析構(gòu)函數(shù)
析構(gòu)函數(shù)的作用是在對象撤銷之前做必要的“清理現(xiàn)場”的工作。當(dāng)派生類的對象從內(nèi)存中撤銷的時候,會先先調(diào)用派生類的析構(gòu)函數(shù)然后再調(diào)用基類的析構(gòu)函數(shù)。
當(dāng)我們new一個臨時對象時,若基類中包含析構(gòu)函數(shù),并且定義了一個指向該基類的指針變量。
三、構(gòu)造函數(shù)不能聲明為虛函數(shù)
構(gòu)造函數(shù)不能聲明為虛函數(shù)。如果聲明為虛函數(shù),編譯器會自動報出。
四、不在析構(gòu)或者構(gòu)造過程中調(diào)用虛函數(shù)
在析構(gòu)函數(shù)或者是構(gòu)造函數(shù)中,我們絕對不能調(diào)用虛函數(shù)。即使,我們在構(gòu)造函數(shù)或者析構(gòu)函數(shù)中調(diào)用虛函數(shù),也不會下降至派生類中調(diào)用函數(shù)。
- 2 回答
- 0 關(guān)注
- 2265 瀏覽
添加回答
舉報