如何用 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
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP