最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++ 中dynamic_cast<>的使用方法小結(jié)

 更新時(shí)間:2013年03月05日 10:56:54   作者:  
將一個(gè)基類對象指針(或引用)cast到繼承類指針,dynamic_cast會根據(jù)基類指針是否真正指向繼承類指針來做相應(yīng)處理
       即會作一定的判斷。
       對指針進(jìn)行dynamic_cast,失敗返回null,成功返回正常cast后的對象指針;
       對引用進(jìn)行dynamic_cast,失敗拋出一個(gè)異常,成功返回正常cast后的對象引用。

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

對編譯器的要求:
       dynamic_cast<> 會用到RTTI技術(shù),因此需要啟動(dòng)“運(yùn)行時(shí)類型信息”這一選項(xiàng),而在VC.net 2003中默認(rèn)是關(guān)閉的。
       所以需要人為的啟動(dòng)這一選項(xiàng)。否則編譯器會報(bào)下面的警告:

         warning C4541: “dynamic_cast”用在了帶 /GR- 的多態(tài)類型“CBasic”上;
       可能導(dǎo)致不可預(yù)知的行為從而導(dǎo)致程序在運(yùn)行時(shí)發(fā)生異常。
該設(shè)置在 Project->Setting中 C/C++ -> C++ Language中設(shè)置。
*/
 
復(fù)制代碼 代碼如下:

#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;
}

相關(guān)文章

最新評論

桦甸市| 宣城市| 高州市| 行唐县| 石狮市| 昆山市| 湖口县| 石家庄市| 明光市| 万载县| 台江县| 太和县| 滦南县| 县级市| 洪江市| 阳泉市| 佛山市| 珲春市| 色达县| 乐东| 江安县| 兰溪市| 大埔区| 临漳县| 上饶市| 英山县| 彭水| 观塘区| 新竹市| 安新县| 平泉县| 依安县| 屯留县| 隆德县| 五大连池市| 砀山县| 莱州市| 周宁县| 化德县| 太湖县| 汉沽区|