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

              C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              117 Posts :: 2 Stories :: 61 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(8)

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

             

            1、 重載、覆蓋和隱藏的概念

                  ①覆蓋:覆蓋指的是派生類的虛擬函數覆蓋了基類的同名且參數相同的函數。

                  ②重載:必須在一個域中,函數名稱相同但是函數參數不同,重載的作用就是同一個函數有不同的行為,因此不是在一個域中的函數是無法構成重載的,這是重載的重要特征。

                  ③隱藏:是派生類的成員函數隱藏了基類函數的成員函數,在調用一個類的成員函數的時候,編譯器會沿著類的繼承鏈逐級向上查找函數的定義,如果找到了就停止查找,所以如果一個派生類和一個基類都有同一個同名(暫且不論參數釋放相同)的函數,而編譯器最終選擇了在派生類中的函數,那么我們就說這個派生類的成員函數“隱藏”了基類的成員函數,也就是說它阻止了編譯器繼續向上查找函數的定義。

            2、 成員函數被重載的特征

                  ①相同的范圍(在同一類中)

                  ②函數名字相同

                  ③參數不同

                  ④virtual關鍵字可有可無

            3、 覆蓋的特征

                  ①不同的范圍(分別位于派生類與基類)

                  ②函數名字相同

                  ③參數相同

                  ④基類函數必須有virtual關鍵字

            4、 “隱藏”的規則

                  如果派生類的函數與基類的函數同名,但是參數不同。此時,不論有無virtual關鍵字,基類的函數將被隱藏(注意別與重載混淆)。

                  如果派生類的函數與基類的函數同名,并且參數也相同,但是基類函數沒有virtual關鍵字。此時,基類的函數被隱藏(注意別于覆蓋混淆)。

            #include <iostream>
            using namespace std;
            class Base
            {
            public:
                
            virtual void f(float x){cout<<"Base::f(float) "<<X<<endl;}
                
            void g(float x){cout<<"Base::g(float) "<<x<<endl;}
                
            void h(float x){cout<<"Base::h(float) "<<endl;}
            }
            ;
            class Derived:public Base
            {
            public:
                
            //函數Derived::f(float)覆蓋了Base::f(float)
                virtual void f(float x){cout<<"Derived::f(float) "<<x<<endl;}
                
            //函數Derived::g(int)隱藏了Base::g(float),而不是重載
                void g(int x){cout<<"Derived::g(int) "<<x<<endl;}
                
            //函數Derived::h(float)隱藏了Base::h(float),而不是覆蓋
                void h(float x){cout<<"Derived::h(float) "<<x<<endl;}
            }
            ;

            想要獲得更多內容,可點擊:《Visual C++代碼參考與技巧大全》學習筆記——索引隨筆
            posted on 2010-02-17 17:04 煙皚 閱讀(536) 評論(0)  編輯 收藏 引用 所屬分類: 《Visual C++代碼參考與技巧大全》學習筆記
            亚洲国产精品久久久久婷婷老年 | 97精品伊人久久久大香线蕉| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区 | 久久天天躁狠狠躁夜夜不卡| 久久夜色精品国产噜噜麻豆| 久久精品www| 亚洲精品无码久久千人斩| 婷婷久久综合九色综合98| 久久人与动人物a级毛片| 狠狠精品久久久无码中文字幕 | 久久国产精品99国产精| 青春久久| 久久国产热这里只有精品| 久久精品天天中文字幕人妻| 亚洲精品第一综合99久久| 久久精品国产亚洲一区二区| 久久夜色精品国产噜噜噜亚洲AV | 亚洲精品乱码久久久久久中文字幕| 久久精品人人做人人爽电影| 一本色道久久88—综合亚洲精品 | 欧美日韩精品久久久免费观看| 国产成人久久精品激情| 婷婷五月深深久久精品| 久久久这里只有精品加勒比| 国内精品免费久久影院| 国产69精品久久久久9999| 777米奇久久最新地址| 色综合久久中文字幕无码| 国产精品亚洲综合久久| 久久精品国产亚洲AV蜜臀色欲| 精品欧美一区二区三区久久久| 久久国产精品久久精品国产| 狠狠色丁香久久综合五月| 久久午夜伦鲁片免费无码| 久久精品亚洲中文字幕无码麻豆| 伊人久久大香线蕉综合影院首页| 久久久久人妻一区二区三区| 久久久SS麻豆欧美国产日韩| 亚洲国产另类久久久精品小说| 伊人久久大香线蕉AV色婷婷色| 久久久久亚洲精品天堂|