C 中為何建構函式不可是虛函式,而析構函式可以?

2021-10-04 01:58:39 字數 326 閱讀 3059

建構函式不可以是虛函式:

從實現上看,虛函式表在構造函式呼叫後才建立,因而建構函式不可能成為虛函式

從實際含義上看,在呼叫建構函式時還不能確定物件的真實型別(因為子類會調父類的建構函式);而且建構函式的作用是提供初始化,在物件生命期只執行一次,不是物件的動態行為,也沒有太大的必要成為虛函式

析構函式可以是虛函式:

在繼承體系中,基類的析構函式一般宣告成虛函式,因為子類要重新定義它用來銷毀物件。而且有的時候是必須的,基類指標指向派生類,用基類指標delete時,如果不定義成虛函式,派生類中派生的那部分無法析構。

C 建構函式中呼叫虛函式

我們知道 c 中的多型使得可以根據物件的真實型別 動態型別 呼叫不同的虛函式。這種呼叫都是物件已經構建完成的情況。那如果在建構函式中呼叫虛函式,會怎麼樣呢?有這麼一段 class a virtual void func void test public int m ival class b publ...

C 建構函式中呼叫虛函式

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

建構函式不可虛,析構可以虛

一.什麼是虛函式 可以讓成員函式操作一般化,用基類的指標指向不同的派生類的物件時,基類指標呼叫其虛成員函式,則會呼叫其真正指向物件的成員函式,而不是基類中定義的成員函式 只要派生類改寫了該成員函式 若不是虛函式,則不管基類指標指向的哪個派生類物件,呼叫時都 會呼叫基類中定義的那個函式。例class ...