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

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

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

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

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

最新評(píng)論

文山县| 阆中市| 宝山区| 永济市| 怀仁县| 伊金霍洛旗| 蚌埠市| 遂川县| 孝义市| 大埔区| 灵山县| 盐津县| 陆丰市| 射洪县| 苗栗市| 图木舒克市| 玛纳斯县| 旌德县| 巨鹿县| 灵石县| 澄城县| 龙川县| 通辽市| 海南省| 阳西县| 朝阳市| 临夏市| 江安县| 台东市| 敦煌市| 深圳市| 祁连县| 井研县| 潼关县| 阳高县| 松阳县| 远安县| 二连浩特市| 永寿县| 呼图壁县| 梨树县|