-
在異常處理時,我們可以通過定義一個接口類,然后定義不同異常繼承這個類,通過不同異常處理不同的方法,就可以把處理異常和多態(tài)結合
查看全部 -
常見的異常
查看全部 -
catch獲取try中的異常,并做處理,不識別的異常可以用。。。統(tǒng)一處理
查看全部 -
throw try catch的用法
查看全部 -
#include <iostream>
#include <stdlib.h>
#include <string>
#include<typeinfo> //別忘了加上庫
using namespace std;
/**
?* 定義移動類:Movable
?* 純虛函數(shù):move
?*/
class Movable
{
public:
? ? virtual void move()=0;
};
/**
?* 定義公交車類:Bus
?* 公有繼承移動類
?* 特有方法carry
?*/
class Bus : public Movable
{
public:
? ? virtual void move()
? ? {
? ? ? ? cout << "Bus -- move" << endl;
? ? }
? ??
? ? virtual void carry()
? ? {
? ? ? ? cout << "Bus -- carry" << endl;
? ? }
};
/**
?* 定義坦克類:Tank
?* 公有繼承移動類
?* 特有方法fire
?*/
class Tank :public Movable
{
public:
? ? virtual void move()
? ? {
? ? ? ? cout << "Tank -- move" << endl;
? ? }
? ? virtual void fire()
? ? {
? ? ? ? cout << "Tank -- fire" << endl;
? ? }
};
/**
?* 定義函數(shù)doSomething含參數(shù)
?* 使用dynamic_cast轉換類型
?*/
void doSomething(Movable *obj)
{
? ? obj->move();
? ? if(typeid(*obj)==typeid(Bus))
? ? {
? ? ? ?Bus *bus=dynamic_cast<Bus *>(obj);
? ? ? ? bus->carry();
? ? }
? ? if(typeid(*obj)==typeid(Tank))
? ? {
? ? ? ? Tank *tank=dynamic_cast<Tank *>(obj);
? ? ? ? tank->fire();
? ? }
}
int main(void)
{
? ? Bus b;
? ? Tank t;
? ? doSomething(&b);
? ? doSomething(&t);
? ? return 0;
}
查看全部 -
每一類最多只有一個虛函數(shù)表公用,子類中有與父類中虛函數(shù)同名的函數(shù),則子類的虛函數(shù)表中的對應項會覆蓋掉從父類繼承的那一項
查看全部 -
dynamic_cast只能轉換含有虛函數(shù)的類的指針大概
查看全部 -
理論前提:
執(zhí)行完子類的析構函數(shù)系統(tǒng)就自動會執(zhí)行父類的析構函數(shù)查看全部 -
覆蓋:
子類定義了與父類同名的虛函數(shù)
子類的虛函數(shù)表中子類的虛函數(shù)地址會覆蓋掉父類的虛函數(shù)地址
查看全部 -
多態(tài)具體到語法中是指,使用父類指針指向子類對象,并可以通過該指針調用子類的方法; 產生多態(tài)的基礎是繼承關系,沒有繼承就沒有多態(tài); 多態(tài)的語法核心是virtual關鍵字,必須使用virtual才能使多個類間建立多態(tài)關系; 封裝、繼承、多態(tài)是面向對象的三大特征。
查看全部 -
typeid的注意事項
查看全部 -
typeid返回的事一個type_info類型,這個類可用函數(shù)如下
查看全部 -
typeid(類):判斷類的類型
typeid(類),name(); 類的名稱
dynamic_cast<目標類型指針或引用>(原類型):吧原類型轉化為目標類型
查看全部 -
RTTI就是對繼承同一父類的不同子類在運行時調用同名的父類函數(shù)時,判斷子類類別并進行相應的動作的判斷
查看全部 -
? ? RTTI ;運行時狀態(tài)識別
查看全部
舉報