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

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

C++之多態(純虛函數+RTTI+異常處理)

2019-11-06 07:11:52
字體:
來源:轉載
供稿:網友

純虛函數 純虛函數是指沒有函數體,定義時在函數名后加上=0,如下代碼所示

class Shape{public: virtual double calcArea()//虛函數 {return 0;} virtual double calcPerimeter()=0;//純虛函數PRotected: int m_iEge;};

在虛函數指針指向的虛函數表中,calcPerimeter=0。含有純虛函數的類叫做抽象類,抽象類無法實例化對象(無論堆中或棧中),當抽象類的子類,將基類中的純虛函數都進行賦值以后,即不是=0后才能夠實例化。

接口類 僅含有純虛函數的類叫做接口類,接口類沒有數據成員,僅有純虛成員函數。如下代碼所示

class Shape{public: virtual double calcArea()=0; virtual double calcPerimeter()=0;};

運行時類型識別(RTTI Run-Time Type Identification)。 在下面的代碼中,能不能做到判斷對象類型完成注釋的部分,就要用到RTTI

class Flyable{public: virtual void takeoff() = 0; virtual void land()=0;};class Bird : public Flyable{public: void foraging(){......} virtual void takeoff(){......} virtual void land(){......}private: ...};class Plane : public Flyable{public: void carry(){......} virtual void takeoff(){......} virtual void land(){......}};void doSomething(Flyable *obj){ obj->takeoff(); //如果是bird,則覓食 //如果是plane,則運輸 obj->land();}

所使用的的代碼如下所示

void doSomething(Flyable *obj){ obj->takeoff(); cout << typeid(*obj).name()<< endl;//輸出當前指針指向的類型名 if (typeid(*obj) == typeid(Bird))//對類型進行比對 { Bird *bird = dynamic_cast<Bird *>(obj);//進行類型的轉化 bird->foraging(); } obj->land();}

同樣我們在使用dynamic_cast的時候有以下幾點注意事項 1.只能用于指針和引用的轉換 2.要轉換的類型中必須含有虛函數 3.轉換成功,返回的是子類的地址,失敗則是NULL

同樣在使用Typeid時也有以下幾點注意事項 1.type_id返回的是一個Type_info對象的引用 2.如果想通過基類的指針獲得派生類的數據類型,基類必須帶有虛函數 3.只能獲取對象的實際類型

#include <typeinfo>//需要該頭文件int main(){ Flyable *p = new Bird(); cout << typeid(p).name() << endl; //打印出Flyable * cout << typeid(*p).name() << endl;//打印出Bird return 0;}

異常處理 異常是指程序在運行過程中出現的錯誤,這些錯誤并不是我們所希望的,但是往往在某種情況下這種錯誤會出現。 異常處理就是對可能發生異常的地方做出預見性的安排,如果我們做出的安排合理,并且能夠給出人性化的提示,那么使用者就不會覺得突兀

進行異常處理用到兩個關鍵字 1. try….catch…. 嘗試(運行正常的邏輯)……捕獲……. [Try catch是一對多的關系] 2. throw 拋出異常

基本思想:主邏輯與異常處理分離

常見的異常: 1.數組下標越界 2.除數為0 3.內存不足


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

圖片精選

主站蜘蛛池模板: 建始县| 莫力| 舟曲县| 广丰县| 方城县| 台东市| 靖安县| 黔西县| 盖州市| 高平市| 西乌珠穆沁旗| 于都县| 博乐市| 辽宁省| 法库县| 巴彦县| 余姚市| 防城港市| 泗水县| 荔浦县| 兴安盟| 崇信县| 湟源县| 霍山县| 华阴市| 定陶县| 达拉特旗| 陆良县| 平乡县| 蓬溪县| 栖霞市| 车致| 东乌珠穆沁旗| 明水县| 岱山县| 定兴县| 建阳市| 阜康市| 丰镇市| 株洲县| 太谷县|