C++類的3種繼承方式

簡單地說下C++類的3種繼承方式,分別是public繼承,protected繼承,private繼承。

最常用的還是public繼承。class默認的是private繼承,它的member如果沒寫權限也是默認

private。struct則相反,默認的是public繼承。結合下面的圖示和代碼,對C++的繼承就有了

比較清晰的認識了。

繼承之後,derived class 繼承過後的member的屬性就是圖中所示。

代碼主要從:

1.基類成員對其對象的可見性:  

2. 基類成員對派生類的可見性:  

3. 基類成員對派生類對象的可見性:

這3個方面談的。

  1. #include <iostream>  
  2.   
  3. class base{  
  4. public:  
  5.     base(){  
  6.         a = 0;  
  7.         b = 1;  
  8.         c = 2;  
  9.     }  
  10.     int a;  
  11. protected:  
  12.     int b;  
  13. private:  
  14.     int c;  
  15. };  
  16.   
  17. class derived1 : public base{//public繼承  
  18. public:  
  19.     void fun(){//derived class可以訪問public和protected member  
  20.         std::cout<<base::a<<base::b<<std::endl;  
  21.     //  std::cout<<base::c;//不能訪問  
  22.     }  
  23. };  
  24. class derived2 : protected base{//protected繼承  
  25. public:  
  26.     void fun(){//derived class可以訪問public和protected member  
  27.         std::cout<<base::a<<base::b<<std::endl;  
  28.      // std::cout<<base::c;//不能訪問  
  29.     }  
  30. };  
  31. class derived3 : private base{//private繼承  
  32. public:  
  33.     void fun(){//derived class可以訪問public和protected member  
  34.         std::cout<<base::a<<base::b<<std::endl;  
  35.      // std::cout<<base::c;//不能訪問  
  36.     }  
  37. };  
  38. class derived4 : public derived3{//base的member不能被private繼承的派生類的子類訪問  
  39. public:  
  40.     void fun(){  
  41.     //  std::cout<<a;  
  42.     }  
  43. };  
  44. class derived5 : base{//默認private繼承  
  45.     void fun(){//derived class可以訪問public和protected member  
  46.         std::cout<<base::a<<base::b;  
  47.         // std::cout<<base::c;//不能訪問  
  48.     }     
  49. };  
  50. int main(void)  
  51. {  
  52.     base b1;  
  53.     derived1 d1;  
  54.     derived2 d2;  
  55.     derived3 d3;  
  56.     d1.fun();  
  57.     d2.fun();  
  58.     d3.fun();  
  59.     std::cout<<b1.a;//base class Object只能訪問public member  
  60.     std::cout<<d1.a;//public繼承時 derived class Object只能訪問base class的public member  
  61.     //std::cout<<d1.b<<d1.c;//不能訪問  
  62.     //std::cout<<d2.a<<d2.b;//protected繼承時 derived class Object不能問訪base class的member  
  63.     //std::cout<<d3.a;//private繼承時 derived class Object不能問訪base class的member  
  64.     return 0;  
  65. }
發佈了20 篇原創文章 · 獲贊 28 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章