程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++中的函數隱藏

C++中的函數隱藏

編輯:C++入門知識

C++中的函數隱藏



只要基類在定義成員函數時已經聲明了virtue關鍵字,在派生類實現的時候覆蓋該函數時,virtue關鍵字可加可不加,不影響多態的實現。

容易與隱藏混淆:
隱藏是指派生類的函數屏蔽了與其同名的基類函數,規則如下:

1) 如果派生類的函數與基類的函數同名,但是參數不同。此時,不論有無virtual關鍵字,基類的函數將被隱藏(注意別與重載混淆)。

2) 如果派生類的函數與基類的函數同名,並且參數也相同,但是基類函數沒有virtual關鍵字。此時,基類的函數被隱藏(注意這種情況與函數重載的區別,重載發生在同一個類中。)。


#include
using namespace std;

class Base
{
public: 
	virtual void f(float x)
	{
		cout<<"BASE::f"<f(1.2f);
	pb->f(1.2f);
	pd->g(1.2f);
	pb->g(1.2f);
	pd->h(1.2f);
	pb->h(1.2f);
	return 0;

}

請大家注意,f()函數屬於覆蓋,而g()與h()屬於隱藏。從上面的運行結果,我們可以注意到在覆蓋中,用基類指針和派生類指針調用函數f()時,系統都是執行的派生類函數f(),而非基類的f()。而在隱藏方式中,用基類指針和派生類指針調用函數g()、h()時,系統會進行區分,基類指針調用時,系統執行基類的g()、h(),而派生類指針調用時,系統“隱藏”了基類的f(),執行派生類的f(),這也就是“隱藏”的由來。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved