• <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>

            大龍的博客

            常用鏈接

            統(tǒng)計

            最新評論

            VC下用dynamic_cast的問題

            #include "iostream.h"
            class base
            {
            int i;
            public:
            base(int I = 0):i(I) {}
            virtual int value() const {return i;}
            };
            class derived:public base
            {
            public:
            derived(int I = 0):base(I) {}
            int value() const {return base::value()*2;}
            virtual int shift(int x) const {return base::value()<< x;}
            };
            void main()
            {
            base* B[] = {new base(7),new derived(8)};
            cout << "B[0]->value:"<<B[0]->value()<<endl;
            cout << "B[1]->value:"<<B[1]->value()<<endl;
            derived* cp = dynamic_cast<derived*>(B[1]);
            if(cp)
            {
            cp->shift(2);
            }
            //cout << "B[1]->value:"<<((derived*)B[1])->shift(2)<<endl;
            }

            原意是想使用dynamic_cast,看B[1]是否為derived*,然后調(diào)用derived才有的shift(),但程序編譯無錯,運行時發(fā)生錯誤,請問具體是什么原因.可否詳細講解一下dynamic_cast的用法.謝謝


            回復人: expert(技術專家)?? 信譽:100
            測一下,由于沒有return值,線程的退出代碼即傳遞給ExitThread或者TerminateThread值未知,所以編譯器把exitcode當作有返回的main來取,就是類似int main()有一個堆棧來保護返回值那樣, 把那個返回值取出來。所以exitcode總有不同。比如你僅僅是HANDLE hThread = ::GetCurrentThread();這時候的exitcode就是hThread的值。這應該是編譯器行為。


            回復人: expert(技術專家)?? 信譽:100
            暈。。。。'dynamic_cast' 當然要加/GR
            樓主不會是這個錯誤吧。。。??駮?。。。
            自做多情了半天,還以為是exitcode有什么關系。

            以上僅僅是臆測~

            ?

            點評:

            當靜態(tài)型別與動態(tài)型別不一治時,由于虛擬函數(shù)時動態(tài)鑒定的,所以,當靜態(tài)是基類,而動態(tài)是派生類時,他會自動執(zhí)行派生類的函數(shù).但是,對于,在派生類中新增加的函數(shù),不會自動轉換,這個時候就會用到static_cast 或者是 dynamic_cast 轉換了,

            感覺是這樣,呵呵
            dynamic_cast是向下的轉化,就是A指針可以是否轉化為B類指針;
            它有什么用呢?
            當我們必須使用派生類的特性,而該特性又沒有出現(xiàn)在基類中時,我們常常要用到:

            posted on 2006-12-03 16:54 大龍 閱讀(599) 評論(1)  編輯 收藏 引用

            評論

            # re: VC下用dynamic_cast的問題 2011-04-29 17:02 hello


            try
            {
            derived* cp = dynamic_cast<derived*>(B[1]);
            }catch(bad_cast& bc)
            {
            }  回復  更多評論   

            国产亚洲精午夜久久久久久 | 国产一区二区精品久久凹凸| 国产精品99久久久久久人| 国产成人香蕉久久久久| 久久人妻少妇嫩草AV蜜桃| 久久久青草久久久青草| 久久精品视频91| 无码人妻久久一区二区三区蜜桃| 青青草原精品99久久精品66| 国产精品美女久久久久AV福利| 国产亚洲精久久久久久无码77777| 国内精品伊人久久久久av一坑| 亚洲国产小视频精品久久久三级 | 久久99国产一区二区三区| 亚洲午夜久久久久久久久久 | 7777精品久久久大香线蕉| 国内精品久久久久久麻豆| 久久久噜噜噜久久熟女AA片| 青青草原综合久久大伊人导航| 国产精品久久久久影院嫩草| 久久久www免费人成精品| 久久亚洲中文字幕精品一区四| 久久人人爽人人爽人人AV东京热 | 亚洲成人精品久久| 国产人久久人人人人爽| 久久久久久毛片免费播放| 亚洲国产成人精品91久久久| 久久久久久毛片免费看| 精品国产综合区久久久久久| 91久久香蕉国产熟女线看| 亚洲一区二区三区日本久久九| 久久精品www人人爽人人| 久久夜色精品国产噜噜噜亚洲AV| 久久人人爽人人爽人人片AV不| 久久精品中文无码资源站| 色婷婷久久久SWAG精品| 久久久综合香蕉尹人综合网| 久久精品国产一区二区三区| 久久久久噜噜噜亚洲熟女综合| 久久久久久久综合综合狠狠| 伊人精品久久久久7777|