• <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)計(jì)

            最新評(píng)論

            VC下用dynamic_cast的問(wèn)題

            #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(),但程序編譯無(wú)錯(cuò),運(yùn)行時(shí)發(fā)生錯(cuò)誤,請(qǐng)問(wèn)具體是什么原因.可否詳細(xì)講解一下dynamic_cast的用法.謝謝


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


            回復(fù)人: expert(技術(shù)專(zhuān)家)?? 信譽(yù):100
            暈。。。。'dynamic_cast' 當(dāng)然要加/GR
            樓主不會(huì)是這個(gè)錯(cuò)誤吧。。。。狂暈。。。
            自做多情了半天,還以為是exitcode有什么關(guān)系。

            以上僅僅是臆測(cè)~

            ?

            點(diǎn)評(píng):

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

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

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

            評(píng)論

            # re: VC下用dynamic_cast的問(wèn)題 2011-04-29 17:02 hello


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


            只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            久久久久久久综合日本| 久久精品国产亚洲一区二区| 久久综合久久综合九色| 久久精品国产免费| 国产99精品久久| 久久国产精品一国产精品金尊| 18禁黄久久久AAA片| 欧美伊人久久大香线蕉综合 | 欧美日韩成人精品久久久免费看 | 精品人妻伦九区久久AAA片69| 久久婷婷五月综合97色| 久久久久99精品成人片欧美| 久久99国产精品久久99果冻传媒| 香蕉久久夜色精品国产小说| 国产精品美女久久久久AV福利| 亚洲国产精品嫩草影院久久| 久久久久久午夜成人影院| 亚洲国产精品久久久久婷婷软件| 久久久久亚洲AV无码去区首| 一本一本久久A久久综合精品 | 97精品伊人久久大香线蕉| 午夜欧美精品久久久久久久| 26uuu久久五月天| 久久国内免费视频| 国产精品美女久久久久av爽| 伊人久久无码精品中文字幕| 精品久久久久中文字幕日本| 久久久久久亚洲精品不卡 | 国产精品久久亚洲不卡动漫| 久久久综合香蕉尹人综合网| 久久精品无码午夜福利理论片| 精品久久久久一区二区三区 | 久久精品成人一区二区三区| 精品久久久久久无码中文字幕| 久久精品国产清自在天天线 | 亚洲狠狠久久综合一区77777| 国产成人综合久久精品红| 国内精品久久久久久久coent| 久久综合狠狠综合久久综合88| 久久亚洲中文字幕精品一区| 污污内射久久一区二区欧美日韩 |