Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> c++基礎 之 面向對象特征一 : 繼承

c++基礎 之 面向對象特征一 : 繼承

編輯:關於Android編程

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() 找不到再到父類找,如果在子類找到了就使用了。。。   //替代原則:向上類型轉換 //在任何需要基類對象(指針)的地方,都可以用子類的對象(指針)來代替
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved