為什麼把成員函式宣告為虛函式

2021-07-04 22:41:38 字數 402 閱讀 6161

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

2. 如果成員函式在類被繼承後功能不需修改,或派生類用不到該函式,則不要把它宣告為虛函式。不要僅僅考慮到要作為基類而把類中的所有成員函式都宣告為虛函式。

3、應考慮對成員函式的呼叫時通過物件名還是通過基類指標或引用去訪問,如果是通過基類指標或引用去訪問的,則應當宣告為虛函式。

4.有時,在定義虛函式時,並不定義去函式體,即函式體是空的。它的作用只是定義了乙個虛函式名,具體功能留給派生類去新增。

使用虛函式,系統要有一定的空間開銷。當乙個類帶有虛函式時,編譯系統會為該類構造乙個虛函式表,它是乙個指標陣列,存放每個虛函式的入口位址。系統在進行動態關聯時的時間開銷時很小的,因此,多型性時高效的。

為什麼建構函式不能宣告為虛函式,析構函式可以

建構函式不能宣告為虛函式,析構函式可以宣告為虛函式,而且有時是必須宣告為虛函式。不建議在建構函式和析構函式裡面呼叫虛函式。建構函式不能宣告為虛函式的原因是 1 構造乙個物件的時候,必須知道物件的實際型別,而虛函式行為是在執行期間確定實際型別的。而在構造乙個物件時,由於物件還未構造成功。編譯器無法知道...

為什麼建構函式不能宣告為虛函式,析構函式可以

建構函式不能宣告為虛函式,析構函式可以宣告為虛函式,而且有時是必須宣告為虛函式。不建議在建構函式和析構函式裡面呼叫虛函式。建構函式不能宣告為虛函式的原因是 1 構造乙個物件的時候,必須知道物件的實際型別,而虛函式行為是在執行期間確定實際型別的。而在構造乙個物件時,由於物件還未構造成功。編譯器無法知道...

為什麼建構函式不能宣告為虛函式,析構函式可以

建構函式不能宣告為虛函式,析構函式可以宣告為虛函式,而且有時是必須宣告為虛函式。不建議在建構函式和析構函式裡面呼叫虛函式。建構函式不能宣告為虛函式的原因是 1 構造乙個物件的時候,必須知道物件的實際型別,而虛函式行為是在執行期間確定實際型別的。而在構造乙個物件時,由於物件還未構造成功。編譯器無法知道...