继承

一,public protected private继承

1,public继承

​ 父类的所有public属性,在子类中也是public。父类的protected属性,在子类中也是protected

class Base {
public:
  void show_base(){}
protected:
  void print_base(){}
private:
  int x;
};

class D : public Base {
  
};

int main(){
  D d;
  d.show_base();//可以调用父类的show_base()
  d.print_base();//不可以调用父类的print_base()
}

2,protected继承

​ 父类的所有public属性,在子类中是protected。父类的protected属性,在子类中也是protected

class Base {
public:
  void show_base(){}
protected:
  void print_base(){}
private:
  int x;
};

class D : protected Base {
  
};

int main(){
  D d;
  //编译不过
  d.show_base();//虽然show_base是父类的public方法,但是因为是protected继承,所以父类的show_base方法,变成了子类的protected方法
}

3,private继承

​ 父类的所有public,protected属性,在子类中都是private

class Base {
public:
  void show_base(){}
protected:
  void print_base(){}
private:
  int x;
};

class D : private Base {
  
};

int main(){
  D d;
  //编译不过
  d.show_base();//虽然show_base是父类的public方法,但是因为是private继承,所以父类的show_base方法,变成了子类的private方法
}

4,protected继承和private继承的区别

假设class B 用private继承 class A 后,不管class C 用什么方式继承class B,class A里的public,protected属性,在class C里也是不可以访问的

class Base {
public:
  void show_base(){}
protected:
  void print_base(){}
private:
  int x;
};

class D : protected Base {
  
};

class C : private D {
public:
  void show_c(){
    //编译通过
    show_base();//因为D是用protected继承的Base,所以Base里的所有public,protected属性,在D中都是protected的。
  }
};

int main(){
  D d;
  //编译不过
  d.show_base();//虽然show_base是父类的public方法,但是因为是private继承,所以父类的show_base方法,变成了子类的private方法
}
class Base {
public:
  void show_base(){}
protected:
  void print_base(){}
private:
  int x;
};

class D : private Base {
  
};

class C : private D {
public:
  void show_c(){
    //编译不过
    show_base();//因为D是用private继承的Base,所以Base里的所有属性,在D中都是private,从而导致C不能访问Base里的任何属性。
  }
};

int main(){
  D d;
  //编译不过
  d.show_base();//虽然show_base是父类的public方法,但是因为是private继承,所以父类的show_base方法,变成了子类的private方法
}
posted @ 2018-06-04 16:34  小石王  阅读(135)  评论(0编辑  收藏  举报