1.虛函數(impure virtual)
C++的虛函數主要作用是“運行時多態”,父類中提供虛函數的實現,爲子類提供默認的函數實現。
子類可以重寫父類的虛函數實現子類的特殊化。
2.普通函數(no-virtual)
普通函數是靜態編譯的,沒有運行時多態,只會根據指針或引用的靜態類型對象,調用自己的普通函數。
普通函數是父類爲子類提供的“強制實現”。
以下代碼輸出Base
struct Base
{
void print(){ cout << "Base" << endl; } //普通函數
};
struct Pub_Derv :public Base
{
void print() { cout << "Pub_Derv" << endl; } //希望同名隱藏
};
int main()
{
Pub_Derv m;
//基類指針調用print,並不會產生動態綁定
Base *n = &m;
n->print();
}
以下代碼輸出Pub_Derv
struct Base
{
virtual void print() { cout << "Base" << endl; } //虛函數
};
struct Pub_Derv :public Base
{
void print() override { cout << "Pub_Derv" << endl; } //特殊化的虛函數
};
int main()
{
Pub_Derv m;
//基類指針調用print,產生動態綁定
Base *n = &m;
n->print();
}