简单地说下C++类的3种继承方式,分别是public继承,protected继承,private继承。
最常用的还是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;
- }