如何用 C++ 在建構函式內呼叫虛擬函式?


儘可能避免在建構函式或解構函式中呼叫虛擬函式。這是因為你呼叫的虛擬函式是從基類呼叫的,而不是從派生類呼叫的。

在 C++ 中,每個類在進入自己的構造之前都構建自己的虛擬方法表版本。因此,在建構函式中呼叫虛擬方法將呼叫基類的虛擬方法。或者,如果它在該級別沒有實現,它將產生一個純虛方法呼叫。一旦基類完全構造,編譯器就開始構建派生類,並覆蓋方法指標以指向派生類的實現。因此,例如,如果你有程式碼;

示例

#include<iostream>
using namespace std;

class Base {
public:
   Base() { f(); }
   virtual void f() { std::cout << "Base" << std::endl; }
};
class Derived : public Base {
public:
   Derived() : Base() {}
   virtual void f() { std::cout << "Derived" << std::endl; }
};

int main() {
   Derived d;    
   return 0;
}

輸出

它將生成以下輸出;

Base

更新於:24-6 月-2020

680 次瀏覽

職業之路從這裡揚帆啟航

透過完成課程取得認證

開始
廣告
© . All rights reserved.