最常用的還是public繼承。class默認的是private繼承,它的member如果沒寫權限也是默認
private。struct則相反,默認的是public繼承。結合下面的圖示和代碼,對C++的繼承就有了
比較清晰的認識了。
繼承之後,derived class 繼承過後的member的屬性就是圖中所示。
代碼主要從:
1.基類成員對其對象的可見性:
2. 基類成員對派生類的可見性:
3. 基類成員對派生類對象的可見性:
這3個方面談的。
- #include <iostream>
- class base{
- public:
- base(){
- a = 0;
- b = 1;
- c = 2;
- }
- int a;
- protected:
- int b;
- private:
- int c;
- };
- class derived1 : public base{//public繼承
- public:
- void fun(){//derived class可以訪問public和protected member
- std::cout<<base::a<<base::b<<std::endl;
- // std::cout<<base::c;//不能訪問
- }
- };
- class derived2 : protected base{//protected繼承
- public:
- void fun(){//derived class可以訪問public和protected member
- std::cout<<base::a<<base::b<<std::endl;
- // std::cout<<base::c;//不能訪問
- }
- };
- class derived3 : private base{//private繼承
- public:
- void fun(){//derived class可以訪問public和protected member
- std::cout<<base::a<<base::b<<std::endl;
- // std::cout<<base::c;//不能訪問
- }
- };
- class derived4 : public derived3{//base的member不能被private繼承的派生類的子類訪問
- public:
- void fun(){
- // std::cout<<a;
- }
- };
- class derived5 : base{//默認private繼承
- void fun(){//derived class可以訪問public和protected member
- std::cout<<base::a<<base::b;
- // std::cout<<base::c;//不能訪問
- }
- };
- int main(void)
- {
- base b1;
- derived1 d1;
- derived2 d2;
- derived3 d3;
- d1.fun();
- d2.fun();
- d3.fun();
- std::cout<<b1.a;//base class Object只能訪問public member
- std::cout<<d1.a;//public繼承時 derived class Object只能訪問base class的public member
- //std::cout<<d1.b<<d1.c;//不能訪問
- //std::cout<<d2.a<<d2.b;//protected繼承時 derived class Object不能問訪base class的member
- //std::cout<<d3.a;//private繼承時 derived class Object不能問訪base class的member
- return 0;
- }