C 建構函式中呼叫虛函式

2021-07-15 20:28:56 字數 567 閱讀 3024

我們知道:c++中的多型使得可以根據物件的真實型別(動態型別)呼叫不同的虛函式。這種呼叫都是物件已經構建完成的情況。那如果在建構函式中呼叫虛函式,會怎麼樣呢?

有這麼一段**:

class

a

virtual

void func()

void

test()

public

:int

m_ival;

};class b : publica;

virtual

void

func()

};int main(int argc ,char*argv)

輸出: 0 1 2

也就是說,在建構函式中呼叫虛函式,呼叫的是正在構造的類中的虛函式,而不是子類的虛函式。

理一下程式。new了乙個b物件,首先要呼叫基類建構函式,也就是a類的建構函式。呼叫test(),再呼叫虛函式func(),這時候用的是基類版本。之後再呼叫子類b的建構函式,這時呼叫的是子類虛函式func()。至於最後一次呼叫func(),根據多型,呼叫的是真實虛函式。

C 建構函式中呼叫虛函式

談談關於建構函式中呼叫虛函式的情況,僅討論單繼承,不考慮虛擬繼承和多重繼承。測試平台 vs2013 win7x64 乙個例子 include include class base public virtual void func class deri public base public virtu...

構造函式呼叫虛函式

在建構函式中呼叫虛成員函式,雖然這是個不很常用的技術,但研究一下可以加深對虛函式機制及物件構造過程的理解。這個問題也和一般直觀上的認識有所差異。先看看下面的兩個類定義。struct c180 virtual foo struct c190 public c180 virtual foo 父類中有乙個...

構造函式呼叫虛函式

參考stroustrup的回答吧 在建構函式中呼叫虛成員函式,雖然這是個不很常用的技術,但研究一下可以加深對虛函式機制及物件構造過程的理解。這個問題也和一般直觀上的認識有所差異。先看看下面的兩個類定義。struct c180 virtual foo struct c190 public c180 v...