青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

李帥的博客

軟件開發愛好者

  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
  14 隨筆 :: 3 文章 :: 4 評論 :: 0 Trackbacks
摘要:

  RTTI(Run-Time Type Identification)是面向對象程序設計中一種重要的技術。現行的C++標準對RTTI已經有了明確的支持。不過在某些情況下出于特殊的開發需要,我們需要自己編碼來實現。本文介紹了一些關于RTTI的基礎知識及其原理和實現。  

RTTI需求:

  和很多其他語言一樣,C++是一種靜態類型語言。其數據類型是在編譯期就確定的,不能在運行時更改。然而由于面向對象程序設計中多態性的要求,C++中的指針或引用(Reference)本身的類型,可能與它實際代表(指向或引用)的類型并不一致。有時我們需要將一個多態指針轉換為其實際指向對象的類型,就需要知道運行時的類型信息,這就產生了運行時類型識別的要求。

  C++對RTTI的支持

  C++提供了兩個關鍵字typeid和dynamic_cast和一個type_info類來支持RTTI:

  dynamic_cast操作符:它允許在運行時刻進行類型轉換,從而使程序能夠在一個類層次結構安全地轉換類型。dynamic_cast提供了兩種轉換方式,把基類指針轉換成派生類指針,或者把指向基類的左值轉換成派生類的引用。見下例講述:

void company::payroll(employee *pe) {
//對指針轉換失敗,dynamic_cast返回NULL
if(programmer *pm=dynamic_cast(pe)){
pm->bonus();
}
}
void company::payroll(employee &re) {
try{
//對引用轉換失敗的話,則會以拋出異常來報告錯誤
programmer &rm=dynamic_cast(re);
pm->bonus();
}
catch(std::bad_cast){

}
}

  這里bonus是programmer的成員函數,基類employee不具備這個特性。所以我們必須使用安全的由基類到派生類類型轉換,識別出programmer指針。

  typeid操作符:它指出指針或引用指向的對象的實際派生類型。

  例如:

employee* pe=new manager;
typeid(*pe)==typeid(manager) //true
  typeid可以用于作用于各種類型名,對象和內置基本數據類型的實例、指針或者引用,當作用于指針和引用將返回它實際指向對象的類型信息。typeid的返回是type_info類型。

  type_info類:這個類的確切定義是與編譯器實現相關的,下面是《C++ Primer》中給出的定義(參考資料[2]中談到編譯器必須提供的最小信息量):

class type_info {
private:
type_info(const type_info&);
type_info& operator=( const type_info& );
public:
virtual ~type_info();
int operator==( const type_info& ) const;
int operator!=( const type_info& ) const;
const char* name() const;
};
 實現目標:

  實現的方案

  方案一:利用多態來取得指針或應用的實際類型信息

  這是一個最簡單的方法,也是作者目前所采用的辦法。

  實現:

enum ClassType{
UObjectClass,
URectViewClass,
UDialogClass,
……
};
class UObject{
virtual char* GetClassName() const {
return "UObject";
};
virtual ClassType TypeOfClass(){
return UObjectClass;
};
};
class UDialog{
virtual char* GetClassName() const {
return "UDialog";
};
virtual ClassType TypeOfClass(){
return UDialogClass;
};
};
  示例:

UObject po=new UObject;
UObject pr=new URectView;
UObject pd=new UDialog;
cout << "po is a " << po->GetClassName() << endl;
cout << "pr is a " << pr->GetClassName() << endl;
cout << "pd is a " << pd->GetClassName() << endl;
cout<TypeOfClass()==UObjectClass<
posted on 2008-11-07 21:44 李帥 閱讀(327) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            韩国成人精品a∨在线观看| 开心色5月久久精品| 久久精品99无色码中文字幕| 亚洲尤物精选| 久久激情视频免费观看| 久久精品亚洲一区二区| 欧美电影免费观看大全| 亚洲国产日韩一区二区| 亚洲电影毛片| 亚洲天堂网站在线观看视频| 欧美一级久久久久久久大片| 裸体女人亚洲精品一区| 欧美日韩免费观看一区三区| 国产精品高清在线| 亚洲第一区中文99精品| 在线中文字幕一区| 性久久久久久久久| 亚洲国产精品成人一区二区| 99在线|亚洲一区二区| 欧美影院视频| 欧美三级视频在线| 影音先锋在线一区| 亚洲一区在线播放| 欧美国产日韩二区| 欧美一区二区三区久久精品茉莉花 | 亚洲免费播放| 欧美专区在线播放| 欧美日韩性生活视频| 一区二区三区在线免费观看| 亚洲一区二区三区四区五区黄 | 久久午夜电影网| 亚洲精品综合在线| 麻豆av一区二区三区| 国产在线观看一区| 午夜一级久久| 99re6热只有精品免费观看| 久久手机免费观看| 国产日韩欧美日韩大片| 一区二区三区免费在线观看| 女女同性精品视频| 久久国产精品第一页| 国产乱码精品一区二区三区五月婷| 亚洲人午夜精品| 欧美成人综合网站| 久久国产主播精品| 午夜精品一区二区在线观看| 国内精品视频666| 午夜视频在线观看一区| 亚洲级视频在线观看免费1级| 久久99在线观看| 国产精品婷婷| 亚洲影视综合| 在线一区二区三区四区| 欧美日韩一区二区三区视频| 一区二区免费看| 亚洲精品美女久久7777777| 欧美风情在线观看| 亚洲免费成人| 日韩一级大片在线| 欧美三级精品| 亚洲一区免费网站| 亚洲一区二区三区免费在线观看 | 欧美一区激情视频在线观看| 国产免费观看久久| 久久精品国亚洲| 欧美伊人久久久久久午夜久久久久 | 午夜视频在线观看一区二区| 亚洲午夜激情免费视频| 国产精品视频99| 久久久久国内| 欧美96在线丨欧| 在线亚洲一区二区| 亚洲自拍电影| 在线观看成人一级片| 亚洲激情图片小说视频| 欧美日韩免费在线观看| 午夜欧美精品久久久久久久| 久久精品人人做人人爽电影蜜月| 在线播放国产一区中文字幕剧情欧美 | 亚洲毛片一区| 欧美三级日韩三级国产三级| 欧美一区二区免费观在线| 欧美综合第一页| 亚洲理论在线| 亚洲欧美日韩国产成人| 亚洲高清视频一区| 一本色道**综合亚洲精品蜜桃冫| 国产精品日韩一区二区| 美女国产一区| 欧美手机在线| 美女91精品| 欧美午夜精彩| 男人的天堂亚洲| 欧美性色aⅴ视频一区日韩精品| 久久精品最新地址| 欧美日韩亚洲高清| 另类综合日韩欧美亚洲| 欧美日韩精品一区二区天天拍小说 | 麻豆精品视频在线观看| 在线视频日韩| 欧美在线观看一区| 亚洲视频狠狠| 免费成人av在线| 欧美一区二区三区免费在线看| 久久久久国产一区二区三区| 亚洲一级黄色片| 久久国产精品99国产精| 亚洲午夜av| 欧美高清自拍一区| 久久视频在线看| 国产精品免费一区二区三区在线观看 | 日韩一级不卡| 亚洲电影欧美电影有声小说| 亚洲中字在线| 亚洲一二三区视频在线观看| 老司机午夜精品| 久久免费观看视频| 国产精品一卡二卡| 在线一区免费观看| 一二三区精品| 欧美精品一区三区| 欧美激情精品久久久久久变态| 国产在线播精品第三| 亚洲欧美第一页| 欧美一级片一区| 国产精品每日更新| 夜夜嗨av一区二区三区四季av| 亚洲欧洲日韩在线| 你懂的成人av| 亚洲国产成人av好男人在线观看| 狠狠色噜噜狠狠狠狠色吗综合| 亚洲午夜在线视频| 亚洲欧美日韩在线一区| 国产精品福利在线观看网址| 日韩视频永久免费| 亚洲一区二区精品在线观看| 欧美日韩亚洲天堂| 在线午夜精品自拍| 欧美与黑人午夜性猛交久久久| 国产精品激情电影| 亚洲影院在线观看| 欧美在线播放一区| 国产日韩欧美综合| 久久久久久久久久久久久女国产乱| 久久久国产精品一区二区中文| 国产日本欧美视频| 久久久久久亚洲综合影院红桃| 欧美阿v一级看视频| 亚洲另类自拍| 国产精品国产馆在线真实露脸| 亚洲影院污污.| 久久久久久亚洲综合影院红桃 | 久久婷婷一区| 欧美 日韩 国产一区二区在线视频 | 久久精品99国产精品| 久久亚洲精品中文字幕冲田杏梨| 狠狠爱www人成狠狠爱综合网| 久久久精品一区二区三区| 欧美搞黄网站| 亚洲天堂av图片| 国产色综合网| 欧美xart系列在线观看| 在线视频精品一区| 美女视频黄 久久| av72成人在线| 国产伊人精品| 欧美日韩一区二区三区四区在线观看 | 一区二区三区国产精华| 国产伦精品一区二区三区高清 | 欧美电影美腿模特1979在线看| 91久久在线| 欧美在线精品免播放器视频| 亚洲黄色免费网站| 国产农村妇女毛片精品久久麻豆 | 国产精品久久网| 久久婷婷一区| 亚洲一区二区精品在线观看| 欧美成人一区二区三区片免费| 在线亚洲观看| 在线日韩av片| 国产欧美va欧美va香蕉在| 欧美成人国产| 欧美专区福利在线| 亚洲午夜激情免费视频| 欧美国产亚洲视频| 久久gogo国模裸体人体| 一本综合久久| 亚洲日本中文字幕| 精品动漫3d一区二区三区免费| 国产精品日韩精品欧美在线| 欧美日本国产视频| 免费成人在线观看视频| 欧美专区中文字幕| 亚洲免费视频成人| 99在线精品视频| 亚洲国产va精品久久久不卡综合| 久久五月天婷婷| 欧美在线观看视频一区二区三区| 一本在线高清不卡dvd| 日韩天堂在线观看|