国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++_重載、重寫和重定義的區別

2019-11-08 00:08:31
字體:
來源:轉載
供稿:網友

相信看到這個標題頭就暈了,其實將他們彼此放到一起來看,就會比較清晰辨認了。

重載:函數名相同,函數的參數個數、參數類型或參數順序三者中必須至少有一種不同。函數返回值的類型可以相同,也可以不相同。發生在一個類內部。

重定義:也叫做隱藏,子類重新定義父類中有相同名稱的非虛函數 ( 參數列表可以不同 ) ,指派生類的函數屏蔽了與其同名的基類函數。發生在繼承中。

重寫:也叫做覆蓋,一般發生在子類和父類繼承關系之間。子類重新定義父類中有相同名稱和參數的虛函數。

如果一個類,存在和父類相同的函數,那么,這個類將會覆蓋其父類的方法,除非你在調用的時候,強制轉換為父類類型,否則試圖對子類和父類做類似重載的調用是不能成功的。 重寫需要注意:1、 被重寫的函數不能是static的。必須是virtual的2 、重寫函數必須有相同的類型,名稱和參數列表3 、重寫函數的訪問修飾符可以不同。盡管virtual是PRivate的,派生類中重寫改寫為public,protected也是可以的重定義規則如下:   a 、如果派生類的函數和基類的函數同名,但是參數不同,此時,不管有無virtual,基類的函數被隱藏。   b 、如果派生類的函數與基類的函數同名,并且參數也相同,但是基類函數沒有vitual關鍵字,此時,基類的函數被隱藏(如果相同有Virtual就是重寫覆蓋了)。

#include<iostream>    using namespace std;    class Animal  {  public:      void func1(int tmp)      {          cout<<"I'm an animal -"<<tmp<<endl;      }      void func1(char *s)//函數的重載      {          cout<<s<<endl;      }      virtual void func2(int tmp)      {          cout<<"I'm virtual animal -"<<tmp<<endl;      }      void func3(int tmp)      {          cout<<"I'm an animal -"<<tmp<<endl;      }  };    class Fish:public Animal  {  public:      void func1()//函數的重定義 會覆蓋父類      {          cout<<"I'm a fish"<<endl;      }      void func2(char *s)//函數的重寫      {          cout<<s<<endl;      }  };    int main()  {      Fish fi;      Animal an;        fi.func1();      fi.func2("I'm a fish,too");      fi.func3(3);        an.func1(1);      an.func1("I'm an animal");      an.func2(1);      return 0;  } 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 赣榆县| 吴桥县| 平罗县| 宁海县| 南木林县| 甘南县| 金溪县| 嘉鱼县| 仙桃市| 黄石市| 瓦房店市| 佳木斯市| 盐津县| 邹平县| 惠安县| 房产| 宣威市| 宜兴市| 盐亭县| 康平县| 江永县| 三亚市| 彭水| 双辽市| 万年县| 林芝县| 塘沽区| 嵊泗县| 浏阳市| 泾川县| 湛江市| 江达县| 东莞市| 无极县| 集贤县| 荥经县| 武强县| 奉新县| 北川| 五河县| 惠安县|