• <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>
            隨筆-60  評論-98  文章-0  trackbacks-0

             類的聲明和實現文件,很簡單,看注釋吧,不多解釋了

             1//---------------------------------------------------------------------------
             2class TFlea // 跳蚤實現類
             3{
             4public:
             5    void MakeSound() // 只會叫我在這里
             6    {
             7        ShowMessage("Flea Here:)");
             8    }

             9}
            ;
            10//-------------------------------------------------------------------------
            11class IDog // 抽象類,狗
            12{
            13public:
            14    virtual void Barking() = 0// 所有的狗都會吠
            15}
            ;
            16//-------------------------------------------------------------------------
            17class THusky : public IDog // 哈士奇實現類,從IDog繼承
            18{
            19public:
            20    virtual void Barking()
            21    {
            22        ShowMessage(m_sName); // 哈士奇會說自己的名字
            23    }

            24public:
            25    THusky(String &sName) // 每個哈士奇都有名字
            26    {
            27        m_Flea = new TFlea(); // 生下來身上就有一只跳蚤
            28        if (NULL == m_Flea)
            29        {
            30            ShowMessage("Create husky failed!");
            31            delete this;
            32        }

            33        m_sName = sName;
            34    }

            35public:
            36    TFlea *m_Flea; // 聚合了一只跳蚤
            37    String m_sName; // 名字
            38}
            ;
            39//-------------------------------------------------------------------------

            測試代碼
            1private:
            2    vector<IDog *> m_vDogs; // 測試類中的狗索引容器

             1    m_vDogs.reserve(20);
             2    // 創建10只狗
             3    for (unsigned int i = 0; i < 10; i++)
             4    {
             5        String sDogName = "Husky: " + (String)(i); // 名字為其創建的序號
             6        IDog *Dog = (IDog *)new THusky(sDogName);
             7        if (NULL == Dog)
             8        {
             9            String sInfo = sDogName + (String)(" Create Failed!");
            10            ShowMessage(sInfo);
            11        }

            12        m_vDogs.push_back(Dog);
            13    }

            1    // 查看第10只狗的名字,它在9號位
            2    THusky *Husky = (THusky *)m_vDogs[9];
            3    String sName = Husky->m_sName;
            4    // 跳蚤還在不在
            5    Husky->m_Flea->MakeSound();

            運行結果顯示:Flea Here
            驗證了結果是:指向子類對象的父類指針,在做DownCast時,不會因為自身是父類指針而使DownCast出的子類對象指針發生缺失,連一只虱子、跳蚤都不會少。
            posted on 2008-09-20 11:22 創建更好的解決方案 閱讀(1518) 評論(2)  編輯 收藏 引用 所屬分類: 面向對象C++專欄理越辯越明

            評論:
            # re: 狗,哈士奇,跳蚤,繼承,聚合,UpCast和DownCast 2008-09-20 14:37 | jef
            不錯啊,挺有創意.要是能出個全集就好了.  回復  更多評論
              
            # re: 狗,哈士奇,跳蚤,繼承,聚合,UpCast和DownCast 2008-09-20 14:47 | cexer
            多重繼承的時候,使用C風格的轉換,可能會出亂子。  回復  更多評論
              
            性欧美大战久久久久久久久 | 久久午夜免费视频| 精品久久久久中文字幕一区| 大美女久久久久久j久久| 国产午夜精品久久久久九九电影| 成人精品一区二区久久久| 国产免费久久久久久无码| 亚洲国产成人精品91久久久| 亚洲国产欧洲综合997久久| 久久本道伊人久久| 亚洲精品视频久久久| 亚洲伊人久久精品影院| 一本久久a久久精品综合夜夜| 精品久久久久久久中文字幕| 中文字幕热久久久久久久| 9999国产精品欧美久久久久久| 欧洲性大片xxxxx久久久| 久久亚洲精精品中文字幕| 久久人妻少妇嫩草AV蜜桃| 日韩精品久久久久久免费| 欧美精品福利视频一区二区三区久久久精品 | 久久夜色精品国产亚洲av| 熟妇人妻久久中文字幕| 香港aa三级久久三级老师2021国产三级精品三级在 | 思思久久好好热精品国产| 久久A级毛片免费观看| 中文精品久久久久人妻| 91精品日韩人妻无码久久不卡| 国内精品伊人久久久久777| 久久精品夜色噜噜亚洲A∨| 国产亚洲欧美成人久久片| 亚洲精品乱码久久久久久久久久久久| 久久国产影院| 青青热久久综合网伊人| 色婷婷久久综合中文久久蜜桃av| 午夜视频久久久久一区 | 国产精品一区二区久久精品| 精品国产乱码久久久久软件 | 影音先锋女人AV鲁色资源网久久 | 久久夜色精品国产亚洲| 激情伊人五月天久久综合|