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

類成員函數的 重載、覆蓋和隱藏區別,函數重載

編輯:C++入門知識

類成員函數的 重載、覆蓋和隱藏區別,函數重載


重載:
成員函數被重載的特征:
(1)相同的范圍(在同一個類中);
(2)函數名字相同;
(3)參數不同;
(4)virtual 關鍵字可有可無。

1 #include <iostream> 2 3 using std::cin; 4 using std::cout; 5 using std::endl; 6 7 class A 8 { 9 public: 10 void show(int val) { cout << val; } 11 void show(double val) { cout << val; } 12 }; 13 14 int main(void) 15 { 16 A a; 17 a.show(4); 18 cout << endl; 19 a.show(4.2); 20 cin.get(); 21 } View Code

 

覆蓋:
覆蓋是指派生類函數覆蓋基類函數,特征是:
(1)不同的范圍(分別位於派生類與基類);
(2)函數名字相同;
(3)參數相同;
(4)基類函數必須有virtual 關鍵字。

1 #include <iostream> 2 3 using std::cin; 4 using std::cout; 5 using std::endl; 6 7 class A 8 { 9 public: 10 virtual void show(int val) { cout << val; } 11 }; 12 13 class B : public A 14 { 15 public: 16 void show(int val) { cout << "--" << val << "--"; } 17 }; 18 19 int main(void) 20 { 21 A a; 22 a.show(4); 23 cout << endl; 24 25 A* p = new B; 26 p->show(5); 27 28 cin.get(); 29 } View Code

 

隱藏:
隱藏是指派生類的函數屏蔽了與其同名的基類函數,規則如下:
(1)如果派生類的函數與基類的函數同名,但是參數不同。此時,不論有無virtual關鍵字,基類的函數將被隱藏(注意別與重載混淆)。
(2)如果派生類的函數與基類的函數同名,且參數也相同,但基類函數沒有virtual 關鍵字。此時,基類的函數被隱藏(注意別與覆蓋混淆)

 

注:小生看到別人的文檔,遂加代碼記錄下來。不要告我啊!我沒錢,O(∩_∩)O哈哈~


對於c++成員函數的重載、覆蓋與隱藏

基類和派生類的關系就像父子,老子可以讓兒子干事,兒子卻不能總是讓老子去干事對吧。。所以啊,派生類的指針式不能指向基類的,基類的指針卻可以指向派生類,基類指針指向派生類的時候,想要條用同名的派生類函數,就必須在基類中定義成虛函數,在程序運行的時候就可以動態的指向派生類的函數了,所以啊,這些概念還是要理清楚的,建議你可以看看《c++ primer》(第四版)人民郵電出版社出版的圖靈系列叢書哈
祝你好運~~~~~~~
 

派生類對基類成員方法的覆蓋與重載有什不同

函數的覆蓋與重載是不應相提並論的,當兩個獨立的函數具有相同的函數名但有不同的函數簽名(即參數的類型,數量及順序),它的關系就是重載,派生類對基類成員函數的覆蓋嚴格來講是對基類成員函數的重新定義(即重寫),它們的函數簽名可以相同也可以不同,就這一點來講,它並不符合函數重載的定義.
 

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