C 特性 隱藏和覆蓋

2021-08-18 11:28:17 字數 865 閱讀 6018

c++類中覆蓋與隱藏一直是乙個容易理解出錯的地方,接下來我就詳細講解一下區別在何處

覆蓋指的是子類覆蓋父類函式(被覆蓋),特徵是:

1.分別位於子類和父類中

2.函式名字與引數都相同

3.父類的函式是虛函式(virtual)

隱藏指的是子類隱藏了父類的函式(還存在),具有以下特徵:

子類的函式與父類的名稱相同,但是引數不同,父類函式

被隱藏子類函式與父類函式的名稱相同,引數也相同,但是父類函式沒有virtual,父類函式

被隱藏

class

father

virtual

void

show2()

};class son:public

father

virtual

void

show2()

};int main()

因為show1是非virtual函式,呼叫它的物件型別為靜態型別即父類(靜態聯編),所以

呼叫的是父類的物件

, 隱藏了子類的函式

但是show2為virtual函式,呼叫它的物件型別為動態型別即指標指向的型別(動態聯編),所以呼叫的是子類的型別

如果,建立子類物件,使用子類的類

con *pf=&s;,是可以呼叫子類的函式的;
if 子類的函式與父類的名稱相同,但是引數不同

父類函式被隱藏,只能呼叫父類函式

else if 子類函式與父類函式的名稱相同&&引數也相同&&但是父類函式沒有virtual

父類函式被隱藏,只能呼叫父類函式

else if 子類函式與父類函式的名稱相同&&引數也相同&&但是父類函式有virtual

父類函式被覆蓋

隱藏和覆蓋 C

我可以給你說說我的理解 我認為隱藏和覆蓋的區別主要體現在 多型上 舉個例子 隱藏和覆蓋 include include using namespace std class a void f class b public a virtual void g int main 結果是 a a b invo...

C 覆蓋和隱藏

class people virtual void getname different params 隱藏規則2 1 函式名相同 引數相同 2 無virtual void getphone same params 覆蓋規則 1 函式名相同 引數相同 2 有virtual virtual void g...

C 隱藏和覆蓋

1 在c 裡面,只有宣告vitual abstract和帶override的方法能夠被子類重寫 override 2 如果父類方法沒有以上關鍵字,子類又有和父類一樣的方法,那麼,就預設隱藏父類方法,這時候在命名空間後面要加new關鍵字 public newint sayhello 如果不加new關鍵...