什麼函式可以是或不是虛函式

2021-08-22 13:34:36 字數 434 閱讀 3572

虛函式的呼叫關係:this -> vptr -> vtable ->virtual function

虛函式指標在類的建構函式中建立(屬於類的成員),呼叫this訪問虛函式指標,指標指向虛函式表

static成員函式:

static成員不屬於任何類物件或類例項,沒有this指標,因此不能為虛函式。

建構函式:建立初始化物件,生成虛函式表。如果建構函式是虛函式則需要虛函式表呼叫,但是物件沒有例項化,還沒有分配記憶體空間,虛函式表沒有建立,因此找不到建構函式。

內聯函式:

編譯時被展開,用函式體去替換函式。而virtual是在執行期間才能動態繫結的

友員函式:

友員函式不是類的成員函式,c++不支援友員被繼承,所以不能為virtual。

析構函式:經常設定為虛函式

只有類的成員函式才能說明為虛函式。

析構函式可以是純虛函式

在某些類裡宣告純虛析構函式很方便。純虛函式將產生抽象類 不能例項化的類 即不能建立此型別的物件 有些時候,你想使乙個類成為抽象類,但剛好又沒有任何純虛函式。怎麼辦?因為抽象類是準備被用做基類的,基類必須要有乙個虛析構函式,純虛函式會產生抽象類,所以方法很簡單 在想要成為抽象類的類裡宣告乙個純虛析構函...

析構函式可以是純虛函式

在某些類裡宣告純虛析構函式很方便。純虛函式將產生抽象類 不能例項化的類 即不能建立此型別的物件 有些時候,你想使乙個類成為抽象類,但剛好又沒有任何純虛函式。怎麼辦?因為抽象類是準備被用做基類的,基類必須要有乙個虛析構函式,純虛函式會產生抽象類,所以方法很簡單 在想要成為抽象類的類裡宣告乙個純虛析構函...

建構函式和析構函式可以是虛函式麼?

可以是,但是不提倡。在c 中,提倡不在建構函式和析構函式中呼叫虛函式 建構函式和析構函式呼叫虛函式時都不使用動態聯編,如果在建構函式或者析構函式中呼叫虛函式,則執行的是為建構函式或者析構函式自身定義型別的版本 父類物件會在子類之前進行建構函式,此時子類函式部分的資料成員還未初始化,因此呼叫子類的虛函...