青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

攀升·Uranus


Something Different,Something New
數據加載中……

public繼承后,父類與子類訪問隱藏 熟練c/c++(三)

         《Effective C++》的第六章節繼承與面向對象設計花了大部分的篇幅在介紹繼承遮掩(Hiding Inherited Name),那我也效仿下大師,做個小的總結。
         public繼承的目的是要建立父子類的is-a關系,也就是說用到父類的地方,在子類一定能用。現實的代碼編寫中,我們主要也是用public繼承,所以每個人都有自己一套繼承的寫法和調用,直到看到Effecitve C++時,才會發現還有很多其它的用法,在這里我并不鼓勵大家嘗試各種寫法,畢竟代碼要穩定,我只是想把一些可能的形式表現出來,供大家參考。
class Base
{
 public:
       virtual void fn() = 0;
       virtual void fn(int i){printf("\n Base: fn(int)\n");};
       virtual void fn2() {printf("\n Base: void fn2(int)\n");}
       void fn3() {printf("\n Base: fn3()\n");}
       void fn4(){printf("\n Base: fn4()\n");}
};

class ClassA : public Base
{
public:
      ClassA(int n, int d);
      // using Base::fn2;
      virtual void fn(){printf("\n ClassA: fn()\n");};
       virtual void fn(int i){printf("\n ClassA: fn(INT)\n");};

       virtual void fn2(int i) {printf("\n ClassA: fn2(INT)\n"); }

       void fn3() {printf("\n ClassA: fn3()\n");}
       void fn4(int i){printf("\n ClassA: fn4()\n");}
 };
int main()

Base* pBase1 = new ClassA(10, 20);
 pBase1->fn();              //OK,ClassA: fn()
 pBase1->fn(11);          //OK,ClassA: fn(INT)
 pBase1->fn2();            //OK,Base: void fn2(int)
 pBase1->fn2(2);          //NO, 不能訪問
 pBase1->fn3();            //OK,Base: fn3()
 pBase1->fn4();            //OK,Base: fn4()
 pBase1->fn4(2);          //NO,不能訪問
 printf("\n============================================\n");
 ClassA* pDerived = new ClassA(10, 20);
 pDerived->fn();            //OK,ClassA: fn()
 pDerived->fn(1);          //OK,ClassA: fn(INT)
 pDerived->fn2();          //NO,不能訪問
 pDerived->fn2(2);        //OK,ClassA: fn2(INT)
 pDerived->fn3();          //OK,ClassA: fn3()
 pDerived->fn4();          //NO,不能訪問
 pDerived->fn4(2);        //NO,ClassA: fn4(INT)
 printf("\n============================================\n");
 return 0;      
}


子類父類同名virtual函數(參數相同), 用子類的指針,引用,對象訪問時,子類會覆蓋父類方法(只能訪問子類方法)。
子類父類同名virtual函數(參數相同), 用父類的指針,引用,對象訪問時,子類會覆蓋父類方法(只能訪問子類方法)。
子類父類同名virtual函數(參數不同), 用子類的指針,引用,對象訪問時,子類會覆蓋父類方法(只能訪問子類方法)。
子類父類同名virtual函數(參數不同), 用父類的指針,引用,對象訪問時,父類會覆蓋子類方法(只能訪問父類方法)。
子類父類同名virtual函數(函數類型不同const/non-const), 用子類的指針,引用,對象訪問時,子類會覆蓋父類方法(只能訪問子類方法)。
子類父類同名virtual函數(函數類型不同const/non-const), 用父類的指針,引用,對象訪問時,父類會覆蓋子類方法(只能訪問父類方法)。

結論:參數和函數類型是c++編譯器判斷要不要多態的關鍵因素。注: 返回類型不同時,編譯器會報錯,virtual不能和static連用。靜態成員函數,沒有隱藏的this指針,virtual函數一定要通過對象來調用,既要this指針。
改進::如果子類指針想訪問到父類,可以在子類里加入:using 父類名::函數名;如pDerived->fn2(); 訪問父類方法,在ClassA里面加入using Base::fn2,就可以訪問了。如果父類指針想訪問到子類,就需要指針轉換了。

子類父類同名non-virtual函數(無論參數/返回/函數類型(const或static)),用子類的指針,引用,對象訪問,子類會覆蓋父類方法(只能訪問子類方法)。
子類父類同名non-virtual函數(無論參數/返回/函數類型(const或static)),用父類的指針,引用,對象訪問,父類會覆蓋子類方法(只能訪問父類方法)。

結論: non-virtual函數,既沒有任何多態效果,如果父類要訪問子類,只用指針轉換。   

         所謂大道至簡,想必大家看著這個都煩,我也是。想了想應該這樣表達最簡單:
 
         子類public繼承父類的函數,唯有滿足(參數,返回值,函數類型相同&父類是virtual)函數,父類的指針,引用(也指針實現的)能夠多態的訪問子類,否則父類指針只能訪問父類的方法。 
         
         子類public繼承父類的函數,子類的方法名會遮掩父類的相同名的方法。子類要想訪問父類的方法,使用using 父類名::函數名。    
       
         具體的原因我覺得可能還是得找時間拜讀下候杰譯的《C++對象模型》,看看到底這個東西是怎么設計的。

posted on 2009-01-05 11:16 攀升 閱讀(6365) 評論(0)  編輯 收藏 引用 所屬分類: C/C++

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产精品久久久久久久久果冻传媒| 亚洲精品视频一区二区三区| 欧美夫妇交换俱乐部在线观看| 欧美精品aa| 国产精品久久久一区麻豆最新章节 | 欧美日韩午夜| 亚洲综合视频一区| 亚洲图片激情小说| 国产日产亚洲精品| 欧美大胆人体视频| 欧美精品在线一区二区三区| 亚洲午夜av在线| 午夜精品福利视频| 亚洲国产婷婷香蕉久久久久久99| 欧美激情按摩在线| 国产精品女主播| 麻豆成人在线| 欧美深夜影院| 老司机凹凸av亚洲导航| 欧美精品一区在线发布| 久久精品国语| 欧美日韩久久久久久| 久久精品日韩一区二区三区| 蜜臀91精品一区二区三区| 亚洲综合视频一区| 卡一卡二国产精品| 亚洲欧美制服中文字幕| 免费成人性网站| 午夜精品视频| 欧美日本高清视频| 欧美jizzhd精品欧美巨大免费| 欧美日韩精品系列| 欧美国产日本在线| 国产麻豆91精品| 日韩一二在线观看| 亚洲国产精品第一区二区三区| 一区二区三区精品| 99热免费精品在线观看| 久久人人看视频| 久久久精品999| 国产精品免费aⅴ片在线观看| 亚洲国产成人精品久久| 国产精品一二三四区| 亚洲精品久久久久| 欧美精品 日韩| 欧美人妖在线观看| 久久久久国产精品一区三寸| 欧美日韩综合| 91久久中文字幕| 在线观看日韩av| 欧美影院一区| 久久激情网站| 国模私拍视频一区| 久久精品成人一区二区三区| 欧美在线观看一区二区三区| 国产精品对白刺激久久久| 99精品99久久久久久宅男| 在线午夜精品自拍| 欧美日韩在线一区| 在线午夜精品| 午夜精品婷婷| 国产视频久久网| 欧美一区二区高清在线观看| 久久久7777| 激情欧美日韩一区| 久久精品国产69国产精品亚洲| 欧美在线亚洲一区| 国产综合视频在线观看| 久久国产天堂福利天堂| 久久免费视频网站| 经典三级久久| 欧美xx69| 日韩午夜激情电影| 性亚洲最疯狂xxxx高清| 狠狠色综合色区| 美女在线一区二区| 亚洲裸体俱乐部裸体舞表演av| 中文国产一区| 国产欧美va欧美va香蕉在| 久久电影一区| 亚洲国产日韩在线| 亚洲免费视频一区二区| 国产欧美另类| 免费日韩成人| 中文在线一区| 久久婷婷蜜乳一本欲蜜臀| 亚洲精品国产欧美| 国产精品素人视频| 久久久噜噜噜久久中文字免| 亚洲精品三级| 久久久亚洲国产美女国产盗摄| 亚洲欧洲精品一区二区三区| 国产精品另类一区| 巨胸喷奶水www久久久免费动漫| 99在线精品视频在线观看| 久久精品国产亚洲一区二区三区| 国产一区二区三区久久| 欧美日韩国产不卡在线看| 午夜精品在线看| 91久久国产精品91久久性色| 欧美一级日韩一级| 日韩网站在线观看| 韩国福利一区| 国产精品国色综合久久| 免费观看不卡av| 午夜在线电影亚洲一区| 亚洲精选久久| 欧美1区3d| 欧美一区二区视频网站| 99在线热播精品免费| 激情婷婷亚洲| 国产日韩精品一区二区| 欧美日韩一区精品| 欧美成人精品在线观看| 久久久999| 欧美一区二区福利在线| 亚洲一区日韩| 亚洲福利国产精品| 亚洲欧美日韩国产成人| 亚洲国产精品久久久久秋霞蜜臀| 久久成人精品| 亚洲欧美第一页| 在线视频你懂得一区| 亚洲国产欧美一区| 激情欧美国产欧美| 国产综合久久久久影院| 国产精品自在欧美一区| 欧美性大战久久久久久久蜜臀 | 欧美岛国激情| 久久综合狠狠综合久久综合88| 欧美一区高清| 亚洲在线一区二区三区| 在线视频一区二区| 在线一区观看| 亚洲手机在线| 亚洲影院色无极综合| 亚洲手机成人高清视频| 一区二区欧美在线| 亚洲婷婷综合久久一本伊一区| 一本久久a久久免费精品不卡| 亚洲精品美女在线观看播放| 亚洲精品国产精品国自产观看浪潮| 在线观看av不卡| 亚洲激情第一区| 亚洲久久一区| 亚洲视频中文字幕| 午夜精品福利在线| 欧美一区二区观看视频| 久久精视频免费在线久久完整在线看| 久久久xxx| 欧美国产日韩精品免费观看| 亚洲高清久久| 日韩午夜免费视频| 亚洲欧美大片| 久久精品亚洲精品| 欧美成人激情视频免费观看| 欧美区亚洲区| 国产欧美日韩三级| 黄色成人片子| 日韩一级大片| 欧美在线观看视频在线| 欧美成人一区二区三区| 亚洲卡通欧美制服中文| 亚洲综合视频在线| 久久亚洲一区二区| 欧美精品日韩精品| 国产乱码精品一区二区三区五月婷| 国内精品写真在线观看| 亚洲美女性视频| 午夜在线观看免费一区| 欧美凹凸一区二区三区视频| 亚洲乱码国产乱码精品精天堂 | 免费成人激情视频| 国产精品欧美在线| 在线精品视频一区二区三四| 99精品久久免费看蜜臀剧情介绍| 午夜免费电影一区在线观看| 欧美jizz19hd性欧美| 亚洲色图制服丝袜| 久久综合九色欧美综合狠狠| 国产精品久久久久7777婷婷| 亚洲国产成人tv| 欧美在线观看网址综合| 亚洲区一区二区三区| 久久国产精品高清| 国产精品成人一区二区| 亚洲国产视频直播| 久久aⅴ国产欧美74aaa| 亚洲茄子视频| 另类图片综合电影| 国产自产精品| 亚洲欧美日韩中文播放| 亚洲人成网站在线观看播放| 久久久精品久久久久| 国产精品主播| 亚洲一区二区毛片| 亚洲人www| 最新日韩在线视频| 一区二区三区产品免费精品久久75| 久久久福利视频|