• <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>
            隨筆-59  評(píng)論-36  文章-0  trackbacks-0
            問題1:
            class Base1
            {
            public:
                
            virtual void f()
                
            {
                    cout 
            << "Base1::f" << endl;
                }

                
            virtual void g()
                
            {
                    cout 
            << "Base1::g" << endl;
                }

            }
            ;
            class Base2 :public virtual Base1
            {
            public:

                
            virtual void f()
                
            {
                    cout 
            << "Base2::f" << endl;
                }

                
            virtual void g()
                
            {
                    cout 
            << "Base2::g" << endl;
                }

            }
            ;

            class Base3:public virtual Base1
            {
            public:

                
            virtual void f()
                
            {
                    cout 
            << "Base3::f" << endl;
                }

                
            virtual void g()
                
            {
                    cout 
            << "Base3::g" << endl;
                }

            }
            ;

            class Derive : public Base2, public Base3 {
            public:
            virtual void g() { cout << "Derive::g1" << endl; }
            }
            ;

            以上代碼是在論壇中遇見的,當(dāng)時(shí)我并沒有立刻反應(yīng)上來這是什么緣故,思索一陣后,才弄明白。
            原來,在Derive中沒有重寫f函數(shù),又因?yàn)楫?dāng)派生類沒有重寫基類的虛函數(shù)時(shí),派生類對(duì)象對(duì)該虛函數(shù)的調(diào)用,將會(huì)調(diào)用其基類中的版本,而Derive又是多繼承,于是在Derive繼承時(shí)就不知道Base1中的虛函數(shù)表應(yīng)該記錄哪個(gè)版本的f函數(shù),是Base2,還是Base3。
            因?yàn)镈erive中已重定義g函數(shù),Base1的虛函數(shù)表記錄的是Derive::g。

            ==============================================================================

            問題2:
            代碼來源<effective C++>2nd

            class Lottery
            {
            public:
              
            virtual int draw();
            };

            class GraphicalObject 
            {
            public:
              
            virtual int draw();
            };

            class LotterySimulation: public Lottery,
                                     
            public GraphicalObject 
            {
              
            // 沒有聲明draw
            };

            LotterySimulation 
            *pls = new LotterySimulation;

            pls
            ->draw();   // 錯(cuò)誤! ---- 二義

            因?yàn)長(zhǎng)otterySimulation中存在兩個(gè)名為draw的函數(shù),于是調(diào)用存在二義性。同時(shí),即便更改其中一個(gè)draw的訪問性也不能避免這種二義性,因?yàn)楦淖円粋€(gè)類成員的訪問權(quán)限不應(yīng)該改變程序的含義。
            對(duì)于如下代碼,仍然存在二義性
            class SpecialLotterySimulation: public LotterySimulation 
            {
            public:
              
            virtual int draw();
            };

            pls 
            = new SpecialLotterySimulation;

            pls
            ->draw();     // 錯(cuò)誤!  還是有二義
            因?yàn)椋琾ls的靜態(tài)類型是LotterySimulation,而名字的查找是向上進(jìn)行的,所以即便SpecialLotterySimulation中定義了一個(gè)draw,對(duì)pls來說他是不會(huì)查看SpecialLotterySimilation中的名稱的。
            posted on 2009-10-28 12:51 zhaoyg 閱讀(1154) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C/C++學(xué)習(xí)筆記
            久久精品国产网红主播| 日韩欧美亚洲综合久久影院d3| 无码乱码观看精品久久| 少妇久久久久久被弄到高潮| 综合人妻久久一区二区精品 | 99久久精品免费看国产一区二区三区 | 久久精品国产99国产精品澳门| 久久国产免费直播| 久久久女人与动物群交毛片| 国内精品久久久久久久亚洲| 亚洲国产精品无码久久| 国产香蕉97碰碰久久人人| 人妻精品久久无码区| 欧美日韩中文字幕久久久不卡| 99久久无色码中文字幕| 国产69精品久久久久APP下载 | 91精品观看91久久久久久| 久久精品国产亚洲AV久| 精品乱码久久久久久夜夜嗨| 久久99精品国产99久久6男男| 亚洲国产精品嫩草影院久久| 99国产欧美久久久精品蜜芽| 波多野结衣久久一区二区| 国产午夜精品久久久久九九| 久久久精品午夜免费不卡| 日韩AV无码久久一区二区| 麻豆av久久av盛宴av| 亚洲人AV永久一区二区三区久久| 国产精品一区二区久久精品无码 | 欧美日韩精品久久久免费观看| 91亚洲国产成人久久精品| 狠狠色丁香久久综合五月| 激情伊人五月天久久综合| 久久久久人妻一区精品色| 久久国产精品无码一区二区三区| 久久99精品久久久大学生| 久久综合色老色| 亚洲综合熟女久久久30p| 久久久久亚洲av无码专区导航| 亚洲精品乱码久久久久久蜜桃不卡| 中文字幕无码精品亚洲资源网久久|