c++基礎 之 物件導向特徵一 : 繼承

來源:互聯網
上載者:User

class Base{public:void f(){cout<<"void f()"<<endl<<endl;}void f(int i){cout<<"void f(int)"<<endl<<endl;}void h(){cout<<"void h()"<<endl<<endl;}void g(char s){cout<<"void g(char)"<<endl<<endl;}protected:private:};  class Devie1 : public Base{public:void h() // 重定義 覆蓋父類的h(){cout<<"Devie1 void h()"<<endl<<endl;} protected:private:};  class Devie2 : public Base{public:void f()// 重定義 覆蓋了父類的所有重載函數 f() f(int a){cout<<"Devie2 void f()"<<endl<<endl;}void g() // 隱藏 父類的 g(char s){cout<<"Devie2 void g()"<<endl<<endl;}protected:private:}; int _tmain(int argc, _TCHAR* argv[]){Base b;b.f();b.f(2);b.g('3');b.h();  Devie1 d1;d1.f(1);//繼承d1.f();//繼承d1.g('1');//繼承d1.h();//覆蓋  Devie2 d2;d2.f();//覆蓋 //找不到Base::f(int) 被隱藏  覆蓋父類的 f() d2.g();//隱藏//找不到父類的Base::g(char s) 被隱藏d2.h();//繼承//可以看出,若子類沒有重定義父類的操作,子類會調用父類的函數。//如果子類重定義,分兩種情況://1.子類重定義父類的函數,傳回值和參數列表一致,此為 覆蓋  override//子類和基類一樣可以發相同的訊息,但是子類表現出不同於父類的行為。。。。//2.子類重定義了父類的成員函數,但是修改了傳回值或者參數列表,此為隱藏 name hiding //子類重定義父類的重載函數 時 將導致該函數的所有版本在子類中被自動隱藏。。。//d1.f()先在子類找f() 找不到再到父類找,如果在子類找到了就使用了。。。 //替代原則:向上類型轉換//在任何需要基類對象(指標)的地方,都可以用子類的對象(指標)來代替        return 0;}//可以看出,若子類沒有重定義父類的操作,子類會調用父類的函數。//如果子類重定義,分兩種情況://1.子類重定義父類的函數,傳回值和參數列表一致,此為 覆蓋  override//子類和基類一樣可以發相同的訊息,但是子類表現出不同於父類的行為。。。。//2.子類重定義了父類的成員函數,但是修改了傳回值或者參數列表,此為隱藏 name hiding //子類重定義父類的重載函數 時 將導致該函數的所有版本在子類中被自動隱藏。。。//d1.f()先在子類找f() 找不到再到父類找,如果在子類找到了就使用了。。。 //替代原則:向上類型轉換//在任何需要基類對象(指標)的地方,都可以用子類的對象(指標)來代替

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.