乾貨 C 虛函式的使用方法

2021-10-03 16:01:15 字數 1242 閱讀 5311

虛函式的作用

虛函式的使用方法

在什麼情況下應該宣告虛函式

使用虛函式時,有兩點要注意:

只有類的成員函式才能被宣告虛函式,即虛函式只用於類的繼承層次結構中

乙個成員函式被宣告為虛函式後,在同一類族中的類就不能再定義乙個該虛函式同名、同型別和同引數同名非虛函式。

使用虛函式,系統要有一定的額外空間開銷。

當乙個類帶有虛函式時,編譯系統會為該類構造乙個虛函式表(virtual function table,簡稱vtable),它是乙個指標陣列,存放每個虛函式的入口位址

系統在進行動態關聯時的時間開銷是很少的,因此,多型性是高效的。

1.先看成員函式所在的類是否會作為基類,再看成員函式在類的繼承後有無可能被更改功能。如果希望更改其功能的,一般應該將它宣告為虛函式;

2.如果成員函式在類被繼承後功能不需修改,或派生類用不到該函式,則不要把它宣告為虛函式;

3.應考慮對成員函式的呼叫是通過物件名還是通過基類指標或引用去訪問,如果是通過基類指標或引用去訪問的,則應當宣告為虛函式;有時,在定義虛函式時,並不定義其函式體,即函式體是空的。它的作用只是定義了乙個虛函式名,具體功能留給派生類去新增.

虛析構函式

析構函式的作用是在物件撤銷之前做必要的「清理現場」的工作。當派生類的物件從記憶體中撤銷時一般先呼叫派生類的析構函式,然後再呼叫基類的析構函式。但是,如果用new運算子建立了臨時物件,若基類中有析構函式,並且定義了乙個指向該基類的指標變數。在程式用帶指標引數的delete運算子撤銷物件時,會發生乙個情況: 系統會只執行基類的析構函式,而不執行派生類的析構函式。

如果將基類的析構函式宣告為虛函式時,由該基類所派生的所有派生類的析構函式也都自動成為虛函式,即使派生類的析構函式與基類的析構函式名字不相同。

最好把基類的析構函式宣告為虛函式。這將使所有派生類的析構函式自動成為虛函式。這樣,如果程式中顯式地用了delete運算子準備刪除乙個物件,而delete運算子的操作物件用了指向派生類物件的基類指標,則系統會呼叫相應類的析構函式。

虛函式使用方法

虛函式的使用方法 1 在基類用virtual宣告成員函式為虛函式。這樣就可以在派生類中重新定義此函式,為它賦予新的功能,並能方便被呼叫。在類外定義虛函式時,不必在定義virtual 2 在派生類中重新定義此函式,要求函式名,函式型別,函式引數個數和型別全部與基類的虛函式相同,並根據派 生類的需要重新...

虛函式的使用方法

1 在基類用 virtual 關鍵字宣告成員函式為虛函式。這樣就可以在派生類中重新定義此函式,為它賦予新的功能,並能方便地被呼叫 在類 外定義虛函式時,不必再加 virtual 關鍵字。2 在派生類中重新定義此函式,要求函式名 函式型別 函式引數個數和型別全部與 基類的虛函式相同,並根據派生類的需要...

c 中虛函式的相關使用方法

若乙個例項方法宣告前帶有virtual關鍵字,那麼這個方法就是虛方法。虛方法與非虛方法的最大不同是,虛方法的實現可以由派生類所取代,這種取代是通過方法的重寫實現的 以後再講 虛方法的特點 虛方法前不允許有static,abstract,或override修飾符 虛方法不能是私有的,因此不能使用pri...