成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

EasyC++,多態

開發 后端
通常我們會將析構函數也設置成虛方法,因為派生類當中往往有一些專屬成員,這是一種慣例。因為如果析構函數不是虛函數,那么只會調用對應指針類型的析構函數,這意味著可能在一些情況下產生錯誤和問題。

[[442919]]

多態

在我們之前介紹的繼承的情況當中,派生類調用基類的方法都是不做任何改動的調用。

但有的時候會有一些特殊的情況,我們會希望同一個方法在不同的派生類當中的行為是不同的。舉個簡單的例子,比如speak方法,在不同的類當中的實現肯定是不同的。如果是Human類,就是正常的說話,如果是Dog類可能是汪汪,而Cat類則是喵喵。

在這種情況下只是簡單地使用繼承是無法滿足我們的要求的,最好能夠有一個機制可以讓方法有多種形態,不同的對象去調用的邏輯不同。這樣的行為稱為多態。

這里稍微強調一下,多態是一種面向對象的設計思路,本身和C++不是強綁定的,其他語言當中一樣有多態,只不過實現的方式可能有所不同。

在C++當中有兩種重要的機制用于實現多態:

  • 在派生類當中重新定義基類的方法
  • 使用虛方法

我們來看一個例子:

  1. class Mammal { 
  2.  private: 
  3.   string name
  4.  public
  5.   Mammal(string n): name(n) {} 
  6.      string Name() const{ 
  7.             return name
  8.         } 
  9.   virtual void speak() const { 
  10.    cout << "can't say anything" << endl; 
  11.   } 
  12.      virtual ~Mammal() {}; 
  13. }; 
  14.  
  15. class Human : public Mammal{ 
  16.  private: 
  17.   string job; 
  18.  public
  19.   Human(string n, string j): Mammal(n), job(j) {} 
  20.   virtual void speak() const { 
  21.    cout << "i'm human" << endl; 
  22.   } 
  23. }; 

由于示例比較簡單,所以我們把類的聲明和實現寫在一起了。

從結構上來看,這就是一個簡單的繼承,我們實現了兩個類,一個叫做Mammal,一個叫做Human,然后給它們各自定義了一些成員變量。

值得注意的是speak函數,我們在函數聲明前面加上了一個關鍵字virtual,這表示這是一個虛函數。

方法被定義成虛方法之后,在程序執行的時候,將會根據派生類的類型來選擇執行的方法版本。在進行調用的時候,程序是根據對象類型而不是引用和指針的類型來選擇執行的方法,如:

  1. Mammal *m = new Human("man""spiderman"); 
  2. m->speak(); 

這里我們用一個Mammal的指針指向了一個Human類型的對象,當我們調用方法的時候,由于speak方法是一個虛方法。因此執行的時候程序會根據對象的類型也就是Human去執行Human對象中的speak方法,而不是Mammal中的。

通常我們會將析構函數也設置成虛方法,因為派生類當中往往有一些專屬成員,這是一種慣例。因為如果析構函數不是虛函數,那么只會調用對應指針類型的析構函數,這意味著可能在一些情況下產生錯誤和問題。

在上述的示例當中,我們是將類方法的實現和聲明寫在一起了,如果還是采取和之前一樣分開實現的方式,需要注意我們無需在函數簽名中加上virtual關鍵字。

本文轉載自微信公眾號「Coder梁」,可以通過以下二維碼關注。轉載本文請聯系Coder梁公眾號。

 

責任編輯:武曉燕 來源: Coder梁
相關推薦

2021-12-12 18:13:54

C++This指針

2021-11-26 00:03:20

C++編譯常量

2021-12-09 10:56:50

函數C++原型

2021-12-08 10:43:09

C++實現

2021-12-10 10:45:36

C++函數Stock

2021-10-26 00:19:51

C++結構體存儲

2021-12-30 14:58:58

C++函數動態

2021-11-09 10:38:16

C++Const指針

2021-12-11 19:02:03

函數C++對象

2021-11-27 11:50:09

C++靜態持續

2021-11-10 10:48:36

C++函數指針

2021-10-26 15:36:17

C++枚舉值類型

2021-10-27 16:27:20

C++指針操控

2021-12-05 18:20:42

C++空間特性

2021-12-15 10:25:57

C++運算符重載

2022-01-04 16:35:42

C++Protected關鍵字

2021-10-21 18:52:00

C++數組存儲

2021-12-14 10:12:58

C++抽象數據

2021-12-26 00:08:35

C++初始化列表

2021-10-31 20:24:24

C++for循環
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产成人综合亚洲欧美94在线 | 亚洲精品视频在线观看视频 | 日韩一级免费大片 | 91免费观看国产 | av资源中文在线天堂 | 国产精品一卡二卡三卡 | 91在线看视频 | 极品电影院| 亚洲一区二区视频 | 国产日韩一区 | 欧美成人精品激情在线观看 | 日韩精品成人 | 色爱综合网 | 国产网站在线免费观看 | 一区二区三区精品视频 | 亚洲一区二区三区视频在线 | 一级美国黄色片 | 国产精品一区在线观看你懂的 | 国产日韩欧美 | 五月婷婷在线播放 | 日韩亚洲视频在线 | 欧美日韩黄 | 天天草天天爱 | 久久久国产一区二区三区 | 中文字幕精品视频在线观看 | 国产一级黄色网 | 色吊丝2288sds中文字幕 | 国产一区二区三区久久 | 国产亚洲精品久久久久久牛牛 | 毛片免费在线 | 99精品欧美一区二区三区综合在线 | 日韩在线电影 | 91大神在线资源观看无广告 | 精品一区二区三区在线观看国产 | 成人免费看片 | 中国xxxx性xxxx产国 | 男人午夜视频 | 91在线精品一区二区 | 国产日韩欧美中文字幕 | 久久精品欧美一区二区三区麻豆 | 国产成人综合在线 |