c++類中覆蓋與隱藏一直是乙個容易理解出錯的地方,接下來我就詳細講解一下區別在何處
覆蓋指的是子類覆蓋父類函式(被覆蓋),特徵是:
1.分別位於子類和父類中
2.函式名字與引數都相同
3.父類的函式是虛函式(virtual)
隱藏指的是子類隱藏了父類的函式(還存在),具有以下特徵:
子類的函式與父類的名稱相同,但是引數不同,父類函式
被隱藏子類函式與父類函式的名稱相同,引數也相同,但是父類函式沒有virtual,父類函式
被隱藏
class因為show1是非virtual函式,呼叫它的物件型別為靜態型別即父類(靜態聯編),所以father
virtual
void
show2()
};class son:public
father
virtual
void
show2()
};int main()
呼叫的是父類的物件
, 隱藏了子類的函式
但是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關鍵...