C++中虛函數與普通函數區別

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();					
}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章