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

            Kisser Leon

            這個kisser不太冷
            posts - 100, comments - 102, trackbacks - 0, articles - 0

            CRuntimeClass的應用

            Posted on 2007-04-06 10:10 kk 閱讀(1373) 評論(0)  編輯 收藏 引用 所屬分類: IT

            CRuntimeClassMFC中的作用很重要,因為MFC利用它來進行類的動態(tài)確定,即是通過類變量來判定該變量是否為某一類的實例。由于指針的類型是可以轉換的,所以時常會出現(xiàn)從AB的轉換導致錯誤。而在MFC的各種書籍中對CRuntimeClass的介紹是比較少的,在這里總結它的一些用法。

            1、動態(tài)確定類

            MFCCObject::IsKindOf( const CRuntimeClass* pClass ) 利用CRuntimeClass來進行判定,如果你生成的類是以CObject為基礎的,你可以使用該成員函數(shù)來判定。下面舉一個例子來加深了解。

            class CAge:public CObject

            BOOL IsAge(CObject* pO)

            {

                return pO->IsKindOf( RUNTIME_CLASS( CAge ) );

            }

            BOOL IsAge2(CAge* pO)

            {

                return pO->IsKindOf( RUNTIME_CLASS( CAge ) );

            }

            void main(void)

            {

                CObject a;

                CAge b;

                IsAge(&a);//return FALSE

                IsAge(&b);//return TRUE

                IsAge2((CAge*)&a);//return FALSE,避免強制轉換帶來的錯誤

            }

             

            2、生成類

            CObject CRuntimeClass::CreateObject(void)可以產(chǎn)生一個類變量。作用和new類似,但在某些特殊場合有獨特的作用。下面舉一個例子來加深了解。

            假定有以下幾個類定義

            class CWndA: public CWnd

            class CWndB: public CWnd

            function1()

            {

                CRuntimeClass* pC=RUNTIME_CLASS( CWndA );

                CreateWnd(pC);

            }

            CWnd* CreateWnd(CRuntimeClass* pClass)

            {

                return (CWnd*)pClass->CreateObject();

            }

            在上面例子中,CreateWnd返回的是CWnd* 其實它是一個CWndA*。你可以進行由父類到子類的強制轉換而不必要擔心出錯。使用CRuntimeClass可以代替使用switch生產(chǎn)類實例的一些繁瑣。(請好好想想它的用途,當你發(fā)現(xiàn)它的好處時,你一定會大吃一驚,M$使用宏來實現(xiàn)類的動態(tài)檢測,如果誰有興趣可以去看看MFC的源代碼。)

             

            注意:在類的定義中使用IMPLEMENT_DYNCREATE后方可生效。

             

            Google
            无码AV波多野结衣久久| 人妻丰满AV无码久久不卡| 久久精品国产91久久综合麻豆自制 | 久久久国产精品网站| 国产AⅤ精品一区二区三区久久 | 色综合合久久天天给综看| 久久无码AV中文出轨人妻| 久久久婷婷五月亚洲97号色| 久久综合九色综合久99| 欧美国产成人久久精品| 久久九九青青国产精品| 精品久久亚洲中文无码| 亚洲午夜久久影院| 日本人妻丰满熟妇久久久久久| 国产成人精品久久亚洲| 日韩人妻无码一区二区三区久久| 久久精品国产一区二区| 久久国产精品-久久精品| 伊人久久久AV老熟妇色| 久久久91人妻无码精品蜜桃HD| 韩国免费A级毛片久久| 99久久精品国产一区二区| 久久亚洲电影| 国产ww久久久久久久久久| 97r久久精品国产99国产精| 亚洲人成精品久久久久| 久久综合久久性久99毛片| 99久久精品无码一区二区毛片| 久久久久免费看成人影片| 亚洲日本va午夜中文字幕久久| 久久精品夜色噜噜亚洲A∨| 亚洲欧美日韩精品久久| 国产精品内射久久久久欢欢| 久久精品中文无码资源站| 久久久无码人妻精品无码| 亚洲国产欧美国产综合久久| 人妻无码精品久久亚瑟影视| 久久天天躁狠狠躁夜夜2020一| 久久精品人妻中文系列| 中文国产成人精品久久不卡| 人妻丰满AV无码久久不卡|