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

攀升·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>
            久久爱www| 欧美va天堂| 久久精品一本久久99精品| 欧美激情1区2区3区| 亚洲午夜成aⅴ人片| 欧美激情第一页xxx| 亚洲国产成人av在线| 久久精品国产综合精品| 亚洲天堂av在线免费观看| 欧美精品一区二区三区蜜桃| 亚洲国产欧美国产综合一区 | 欧美国产日本在线| 久久久激情视频| 尤物yw午夜国产精品视频明星| 久久深夜福利免费观看| 欧美一区二视频| 一区二区三区自拍| 美女国内精品自产拍在线播放| 久久精品夜色噜噜亚洲aⅴ| 国产真实乱偷精品视频免| 久久免费精品视频| 鲁鲁狠狠狠7777一区二区| 亚洲日本va午夜在线电影 | 欧美一区三区三区高中清蜜桃| 国产九九精品视频| 久久视频一区二区| 免费不卡在线视频| 99伊人成综合| 亚洲免费视频网站| 麻豆精品视频| 国产综合久久| 久久精品论坛| 久久深夜福利免费观看| 亚洲激情国产精品| 亚洲欧洲在线一区| 欧美日韩1区2区| 欧美一级午夜免费电影| 久久精品国产免费观看| 亚洲黄色三级| 国产精品99久久不卡二区| 国产亚洲视频在线观看| 欧美激情精品久久久久久大尺度 | 欧美超级免费视 在线| 欧美成黄导航| 午夜在线精品偷拍| 久久野战av| 亚洲欧美国产va在线影院| 久久se精品一区二区| 99视频超级精品| 欧美中文在线免费| 亚洲毛片在线观看| 欧美一区二区三区另类| 亚洲乱码国产乱码精品精可以看 | 久久久91精品国产| 一区二区三区四区在线| 亚洲欧美激情四射在线日 | 亚洲人成亚洲人成在线观看| 国产精品视频你懂的| 亚洲国产精品久久久久秋霞蜜臀| 国产精品一区毛片| av成人福利| 亚洲精品乱码久久久久久日本蜜臀 | 亚洲制服av| 麻豆精品精华液| 久久国产加勒比精品无码| 欧美日韩国产精品专区| 久久影院午夜论| 国产欧美日韩中文字幕在线| 日韩视频久久| 亚洲精品无人区| 久久永久免费| 久久aⅴ国产紧身牛仔裤| 欧美日一区二区在线观看| 亚洲二区在线视频| 亚洲成色777777在线观看影院| 亚洲欧美成aⅴ人在线观看| 一区二区三区视频在线| 欧美成人免费网站| 欧美国产第一页| 一区二区三区在线高清| 欧美亚洲免费电影| 久久成人资源| 亚洲午夜精品网| 欧美日韩视频一区二区| 欧美成人伊人久久综合网| 狠狠久久婷婷| 久久免费视频网| 老司机久久99久久精品播放免费 | 欧美在线播放视频| 国产精品久久久久久久7电影| 亚洲经典三级| 亚洲另类视频| 欧美日本一区二区三区| 亚洲精品久久久久久久久久久久| 亚洲日本中文字幕区| 免费中文日韩| 亚洲精品视频在线播放| 一区二区三区欧美在线| 欧美经典一区二区三区| 日韩视频免费观看| 午夜国产精品影院在线观看| 国产精品亚洲一区| 欧美一区二区三区四区在线观看地址 | 国内精品一区二区三区| 久久久久免费观看| 亚洲高清在线精品| 日韩一级黄色片| 国产精品豆花视频| 欧美一级大片在线观看| 美玉足脚交一区二区三区图片| 亚洲国产女人aaa毛片在线| 欧美区日韩区| 亚洲综合色在线| 欧美刺激午夜性久久久久久久| 亚洲精品一区二区三区不| 欧美日韩免费一区| 午夜精品在线观看| 欧美国产日韩一区二区三区| 亚洲精品小视频在线观看| 欧美午夜精品理论片a级大开眼界| 亚洲欧美卡通另类91av| 欧美成人黑人xx视频免费观看| 99re这里只有精品6| 国产精品视频久久久| 另类欧美日韩国产在线| 亚洲一区二区三区乱码aⅴ蜜桃女| 久久九九国产| 日韩视频精品| 国产一区观看| 欧美区在线观看| 欧美综合国产精品久久丁香| 亚洲精品在线三区| 久久久久久综合| 亚洲小说欧美另类社区| 激情丁香综合| 国产精品成人一区| 美女视频黄免费的久久| 亚洲伊人久久综合| 亚洲国产精品专区久久| 久久精品视频播放| 亚洲一区二区三区四区五区午夜| 一区二区三区在线高清| 国产精品视频免费观看| 欧美激情精品久久久久久蜜臀| 欧美一级一区| 亚洲一区二区三区涩| 91久久中文字幕| 欧美va天堂| 美日韩精品视频免费看| 久久国产精品电影| 欧美黄色免费网站| 久久久久成人精品免费播放动漫| 亚洲二区视频| 国产一区二区三区在线观看免费视频| 欧美精品一区在线发布| 久久久九九九九| 亚洲一区二区在线免费观看视频| 欧美激情精品久久久久久久变态| 久久精品官网| 香蕉国产精品偷在线观看不卡| 一区二区久久| 亚洲经典三级| 亚洲激情电影中文字幕| 影音先锋日韩资源| 狠狠色丁香婷婷综合影院| 国产乱子伦一区二区三区国色天香| 欧美日本一区二区高清播放视频| 欧美.日韩.国产.一区.二区| 久久婷婷蜜乳一本欲蜜臀| 久久久精品久久久久| 久久久精品国产一区二区三区| 欧美在线综合| 久久精品在线观看| 久久久噜久噜久久综合| 久久久久青草大香线综合精品| 欧美一区在线视频| 欧美伊人精品成人久久综合97| 亚洲伊人色欲综合网| 午夜激情综合网| 欧美一级视频精品观看| 久久九九全国免费精品观看| 久久人人爽人人爽爽久久| 久久久久久久尹人综合网亚洲 | 欧美一区亚洲二区| 欧美一区二视频| 久久久久久夜| 美女诱惑一区| 欧美日韩久久精品| 国产精品夫妻自拍| 国产欧美日韩| 激情综合色综合久久综合| 亚洲国产精品ⅴa在线观看| 亚洲人午夜精品| 亚洲欧美清纯在线制服| 久久久久国产精品一区| 美女精品自拍一二三四| 亚洲人成网在线播放| 亚洲免费在线视频一区 二区| 欧美一区二区三区免费观看视频| 久久精品国内一区二区三区|