2 回答
TA貢獻2012條經驗 獲得超12個贊
虛函數的作用:
允許在派生類中重新定義與基類同名的函數,并且可以通過基類指針或引用來訪問基類和派生類中的同名函數。
虛函數的使用方法是:
1.在基類用virtual聲明成員函數為虛函數可以在派生類中重新定義此函數,為它賦予新的功能,并能方便地被調用。
在類外定義虛函數時,不必再加virtual。
2.在派生類中重新定義此函數,要求函數名、函數類型、函數參數個數和類型全部與基類的虛函數相同,并根據派生類的需要重新定義函數體。
在派生類重新聲明該虛函數時,可以加virtual,也可以不加,但習慣上一般在每一層聲明該函數時都加virtual,使程序更加清晰。
3.如果在派生類中沒有對基類的虛函數重新定義,則派生類簡單地繼承其直接基類的虛函數。
4.定義一個指向基類對象的指針變量,并使它指向同一類族中需要調用該函數的對象。
通過該指針變量調用此虛函數,此時調用的就是指針變量指向的對象的同名函數;
虛函數與指向基類對象的指針變量的配合使用,就能方便地調用同一類族中不同類的同名函數,只要先用基類指針指向即可。
擴展資料:
C++中虛函數的總結
1、如果期望派生類重新定義一個成員函數,應該在基類中把此函數設為virtual。
2.以一個單一指令調用不同函數,這種性質成為多態(polymorphism);
虛擬函數是C++語言的多態性質以及動態綁定的關鍵。
3.抽象類中的虛函數不打算被調用,不應該定義它,應該把它設置為純虛函數(在函數聲明之后加上'=0'即可);
擁有純虛函數者為抽象類,以別于所謂的具體類;
抽象類不能產出對象實例,但是我們可以擁有指向抽象類的指針,以便于操作抽象類中的各個派生類。
4.虛函數派生下去仍為虛函數,而且可以省略virtual關鍵字。
TA貢獻1873條經驗 獲得超9個贊
C++中虛函數的作用:
1、為了方便使用多態特性,我們常常需要在基類中定義虛擬函數。
2、在很多情況下,基類本身生成對象是不合情理的。例如,動物作為一個基類可以派生出老虎、孔雀等子類,但動物本身生成對象明顯不合常理。
為了解決上述問題,引入了純虛函數的概念,將函數定義為純虛函數(方法:virtual ReturnType Function()= 0;),則編譯器要求在派生類中必須予以重寫以實現多態性。
同時含有純虛擬函數的類稱為抽象類,它不能生成對象。這樣就很好地解決了上述兩個問題。
C++中虛函數的用法:
比如你有個游戲,游戲里有個虛基類叫「怪物」,有純虛函數 「攻擊」。然后派生出了三個子類「狼」「蜘蛛」「蟒蛇」,都實現了自己不同的「攻擊」函數,比如狼是咬人,蜘蛛是吐絲,蟒蛇把你纏起來。
然后出現好多怪物的時候就可以定義一個 虛基類指針數組,把各種怪物的指針給它,然后迭代循環的時候直接 monster[i]->attack() 攻擊玩家就行了,大概見下圖:
擴展資料:
使用虛函數的注意事項:
一、包含虛函數的類指針列表會增大。
二、虛析構函數
析構函數的作用是在對象撤銷之前做必要的“清理現場”的工作。當派生類的對象從內存中撤銷的時候,會先先調用派生類的析構函數然后再調用基類的析構函數。
當我們new一個臨時對象時,若基類中包含析構函數,并且定義了一個指向該基類的指針變量。
三、構造函數不能聲明為虛函數
構造函數不能聲明為虛函數。如果聲明為虛函數,編譯器會自動報出。
四、不在析構或者構造過程中調用虛函數
在析構函數或者是構造函數中,我們絕對不能調用虛函數。即使,我們在構造函數或者析構函數中調用虛函數,也不會下降至派生類中調用函數。
- 2 回答
- 0 關注
- 625 瀏覽
添加回答
舉報


