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

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

C++ 中dynamic_cast<>的使用方法小結

2020-01-26 16:21:21
字體:
來源:轉載
供稿:網友
       即會作一定的判斷。
       對指針進行dynamic_cast,失敗返回null,成功返回正常cast后的對象指針;
       對引用進行dynamic_cast,失敗拋出一個異常,成功返回正常cast后的對象引用。

注意:dynamic_cast在將父類cast到子類時,父類必須要有虛函數。例如在下面的代碼中將CBasic類中的test函數不定義成
       virtual時,編譯器會報錯:error C2683: dynamic_cast : “CBasic”不是多態類型

對編譯器的要求:
       dynamic_cast<> 會用到RTTI技術,因此需要啟動“運行時類型信息”這一選項,而在VC.net 2003中默認是關閉的。
       所以需要人為的啟動這一選項。否則編譯器會報下面的警告:

         warning C4541: “dynamic_cast”用在了帶 /GR- 的多態類型“CBasic”上;
       可能導致不可預知的行為從而導致程序在運行時發生異常。
該設置在 Project->Setting中 C/C++ -> C++ Language中設置。
*/
 
復制代碼 代碼如下:

#include <iostream>
using namespace std;

class CBasic
{
public:
     virtual int test(){return 0;} // 一定要是 virtual
};

class CDerived : public CBasic
{
public:
     virtual int test(){    return 1;}
};

int main()
{
     CBasic        cBasic;
     CDerived    cDerived;

     CBasic * pB1 = new CBasic;
     CBasic * pB2 = new CDerived;

     //dynamic cast failed, so pD1 is null.
     CDerived * pD1 = dynamic_cast<CDerived * > (pB1);   

     //dynamic cast succeeded, so pD2 points to  CDerived object                                        
     CDerived * pD2 = dynamic_cast<CDerived * > (pB2);   

     //dynamci cast failed, so throw an exception.            
//    CDerived & rD1 = dynamic_cast<CDerived &> (*pB1);   

//dynamic cast succeeded, so rD2 references to CDerived object.
     CDerived & rD2 = dynamic_cast<CDerived &> (*pB2);   

     return 0;
}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 富平县| 丰顺县| 温泉县| 河曲县| 名山县| 汉阴县| 桐乡市| 张家口市| 商城县| 兴业县| 修文县| 大连市| 平顶山市| 江都市| 中牟县| 隆子县| 东城区| 云和县| 顺昌县| 金门县| 揭阳市| 利川市| 虞城县| 蛟河市| 新民市| 岳普湖县| 赤水市| 夏邑县| 犍为县| 利辛县| 丁青县| 固阳县| 壶关县| 郯城县| 海南省| 巫山县| 双牌县| 淳安县| 高雄县| 浠水县| 巴南区|