亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C++中虛函數的作用是什么?它應該怎么用呢?

C++中虛函數的作用是什么?它應該怎么用呢?

C++
一只甜甜圈 2019-02-19 13:12:50
C++中虛函數的作用是什么?它應該怎么用呢?
查看完整描述

2 回答

?
繁花如伊

TA貢獻2012條經驗 獲得超12個贊

虛函數的作用:

允許在派生類中重新定義與基類同名的函數,并且可以通過基類指針或引用來訪問基類和派生類中的同名函數。

虛函數的使用方法是:

1.在基類用virtual聲明成員函數為虛函數可以在派生類中重新定義此函數,為它賦予新的功能,并能方便地被調用。

在類外定義虛函數時,不必再加virtual。

2.在派生類中重新定義此函數,要求函數名、函數類型、函數參數個數和類型全部與基類的虛函數相同,并根據派生類的需要重新定義函數體。

在派生類重新聲明該虛函數時,可以加virtual,也可以不加,但習慣上一般在每一層聲明該函數時都加virtual,使程序更加清晰。

3.如果在派生類中沒有對基類的虛函數重新定義,則派生類簡單地繼承其直接基類的虛函數。

4.定義一個指向基類對象的指針變量,并使它指向同一類族中需要調用該函數的對象。

通過該指針變量調用此虛函數,此時調用的就是指針變量指向的對象的同名函數;

虛函數與指向基類對象的指針變量的配合使用,就能方便地調用同一類族中不同類的同名函數,只要先用基類指針指向即可。

擴展資料:

C++中虛函數的總結

1、如果期望派生類重新定義一個成員函數,應該在基類中把此函數設為virtual。

2.以一個單一指令調用不同函數,這種性質成為多態(polymorphism);

虛擬函數是C++語言的多態性質以及動態綁定的關鍵。

3.抽象類中的虛函數不打算被調用,不應該定義它,應該把它設置為純虛函數(在函數聲明之后加上'=0'即可);

擁有純虛函數者為抽象類,以別于所謂的具體類;

抽象類不能產出對象實例,但是我們可以擁有指向抽象類的指針,以便于操作抽象類中的各個派生類。

4.虛函數派生下去仍為虛函數,而且可以省略virtual關鍵字。


 


查看完整回答
反對 回復 2019-03-03
?
眼眸繁星

TA貢獻1873條經驗 獲得超9個贊

C++中虛函數的作用:

1、為了方便使用多態特性,我們常常需要在基類中定義虛擬函數。

2、在很多情況下,基類本身生成對象是不合情理的。例如,動物作為一個基類可以派生出老虎、孔雀等子類,但動物本身生成對象明顯不合常理。

為了解決上述問題,引入了純虛函數的概念,將函數定義為純虛函數(方法:virtual ReturnType Function()= 0;),則編譯器要求在派生類中必須予以重寫以實現多態性。

同時含有純虛擬函數的類稱為抽象類,它不能生成對象。這樣就很好地解決了上述兩個問題。

C++中虛函數的用法:

比如你有個游戲,游戲里有個虛基類叫「怪物」,有純虛函數 「攻擊」。然后派生出了三個子類「狼」「蜘蛛」「蟒蛇」,都實現了自己不同的「攻擊」函數,比如狼是咬人,蜘蛛是吐絲,蟒蛇把你纏起來。

然后出現好多怪物的時候就可以定義一個 虛基類指針數組,把各種怪物的指針給它,然后迭代循環的時候直接 monster[i]->attack() 攻擊玩家就行了,大概見下圖:

擴展資料:

使用虛函數的注意事項:

一、包含虛函數的類指針列表會增大。

二、虛析構函數

析構函數的作用是在對象撤銷之前做必要的“清理現場”的工作。當派生類的對象從內存中撤銷的時候,會先先調用派生類的析構函數然后再調用基類的析構函數。

當我們new一個臨時對象時,若基類中包含析構函數,并且定義了一個指向該基類的指針變量。

三、構造函數不能聲明為虛函數

構造函數不能聲明為虛函數。如果聲明為虛函數,編譯器會自動報出。

四、不在析構或者構造過程中調用虛函數

在析構函數或者是構造函數中,我們絕對不能調用虛函數。即使,我們在構造函數或者析構函數中調用虛函數,也不會下降至派生類中調用函數。

 

查看完整回答
反對 回復 2019-03-03
  • 2 回答
  • 0 關注
  • 625 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號