#include #include #include using namespace std;
class base
virtual void logbase()
};class derive:public base
};int main(int argc, const char *argv)
這段**的結果是列印 from base,說明在呼叫base建構函式時,derive還沒被建立所以呼叫的base裡的logbase。**的目的是把派生類的資訊傳遞給base類,利用虛函式的做法顯然這樣是不可行的, C 裡的建構函式為什麼不能為虛函式
以下 在編譯時會出錯,原因是建構函式不能為虛函式。1 class student 78 private 9 intdwno 10 那麼建構函式為什麼不能為虛函式呢?這裡你需要知道乙個概念,那就是虛函式表vtbl,每乙個擁有虛成員函式的類都有乙個指向虛函式表的指標。物件通過虛函式表裡儲存的虛函式位址來...
C 中的建構函式 析構函式,虛函式 純虛函式
1 建構函式能不能是虛函式 1.1 從儲存空間角度 虛函式對應乙個vtable 這大家都知道,可是這個 vtable 其實是儲存在物件的記憶體空間的。問題出來了,如果建構函式是虛的,就需要通過 vtable 來呼叫,可是物件還沒有例項化,也就是記憶體空間還沒有,怎麼找 vtable 呢?所以建構函式...
C 建構函式中呼叫虛函式
我們知道 c 中的多型使得可以根據物件的真實型別 動態型別 呼叫不同的虛函式。這種呼叫都是物件已經構建完成的情況。那如果在建構函式中呼叫虛函式,會怎麼樣呢?有這麼一段 class a virtual void func void test public int m ival class b publ...