国产探花免费观看_亚洲丰满少妇自慰呻吟_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;  } 


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

圖片精選

主站蜘蛛池模板: 鲁甸县| 秦皇岛市| 华亭县| 常宁市| 石泉县| 巧家县| 濉溪县| 台前县| 周至县| 富阳市| 内黄县| 布尔津县| 宝清县| 邯郸市| 阳江市| 汝州市| 永和县| 天柱县| 额尔古纳市| 犍为县| 和田县| 五大连池市| 平定县| 荔波县| 台安县| 武宁县| 襄城县| 惠安县| 乌兰察布市| 安徽省| 金秀| 西青区| 筠连县| 青河县| 桑植县| 承德县| 桐柏县| 重庆市| 景德镇市| 黄浦区| 旬邑县|