总的规律:
1.从父类继承过来的访问属性,取决于父类的继承方式 , 加成员本身的访问属性
2.访问属性,按照访问范围从大到小: public > protected > private .访问属性 = 父类继承方式,和 属性在父类本身的访问属性 最小的访问属性
具体举例只有下面3种组合:
- public + private = private
- public + protected = protected
- protected + private = private
概念总结看着比较拗口,直接看下面代码举例
c++中 class 默认继承是private继承 ,struct 默认是public继承,一般开发全用public继承,方便阅读
代码举例
#include <iostream>
using namespace::std;
class Person{
public:
string name;
private:
void showPerson(){
cout << "showPerson()" <<endl;
}
protected:
void showName() {
cout << "name=" << name <<endl;
}
};
//下面代码是儿子类的继承
//Student1,2,3分别按照public , private ,protected 3种方式继承
下面代码是儿子类的继承
Student1,2,3分别按照public , private ,protected 3种方式继承
class Student1: public Person{
};
class Student2:private Person{
};
class Student3:protected Person{
};
孙子类的继承,全用public为了保持父类的访问属性,方便测试结果
class Pupil1:public Student1{
};
class Pupil2:public Student2{
};
class Pupil3:public Student3{
};
上面代码 Person 里面有 个 3 访问等级的,分别 public: name , private: showPerson() protected showName()
下面的调用代码,为了让代码能运行 不能访问的已经用//注释掉了.注意后面的//注释说明,说明了,为什么不能访问
int main(int argc, const char * argv[]) {
Student1 s1 = Student1();
s1.name;
//s1.showPerson(); //private不能在外面访问
//s1.showName(); //protected不能在外面访问
Student2 s2 = Student2(); //private继承,所有成员都是private ,继承以后的访问属性变成:继承属性和父类属性最小的访问等级
//下面4个都变成了private,所以都不访问.
// s2.name;
// s2.showName();
// s2.showPerson();
Student3 s3 = Student3();
// s3.name;//protected不能访问
// s3.showPerson();//private不能访问
// s3.showName();//protected不能访问
//规律访问属性,取决于,上一级父类的继承方式,和成员本身访问属性
//下面孙子类的,因为儿子类继承Person以后已经把访问属性改变了
Pupil1 p1 = Pupil1();
Pupil2 p2 = Pupil2();
Pupil3 p3 = Pupil3();
// p1.name;//public 可以访问
// p1.showName();//protectd不能访问
// p1.showPerson();//private不能访问.
//
// //父类Student2是private继承,所以父类属性全变成了private
// p2.name;//private不能访问.
// p2.showName();//private不能访问.
// p2.showPerson();//private不能访问.
//父类Student3是protected继承,所以父类属性全变成了protected
// p3.name;//protectd不能访问
// p3.showName();//protectd不能访问
// p3.showPerson();//protectd不能访问
}