C++权限控制关键字包含public, private, protected。
从类自身去看
- public类内和类外均可访问
- private只能类内访问(特殊情况要访问使用友元类或者友元函数)
- protected只能类内访问
从继承关系去看
简单情况下
- public属性的成员和函数都可被子类访问
- private属性的成员和函数不可被子类访问
- protected属性的成员和函数可以被子类访问
虽然private属性成员不能被子类访问,但是子类中存在这些成员,只是被隐藏了。实验代码
公有继承、私有继承、保护继承
子类继承父类格式 class Child: [继承权限] Base1, [继承权限]Base2, … 其中继承权限分为3种。
三种继承方式,在子类内部,父类成员的访问级别与父类相同,改变的只是用户代码(类外)的访问级别。
- public继承,继承之后子类外部访问父类成员权限不变;
- private继承,继承之后子类外部访问父类成员权限全部变为private;
- protected继承,继承之后子类外部访问父类成员public变成protected(可以进一步被继承使用),private还是private,protected还是protected。
C++的权限控制保证了一般情况下用户代码(类外)不能访问private和protected的成员,子类不能访问父类private成员,子类能够访问父类protected成员。
默认权限级别
- class默认的权限级别是private,struct默认的权限级别是public。
- 继承的权限级别默认是private。
实验代码
代码1
1 |
|
代码2
1 |
|
这里是8的原因可以参考C++类和对象的存储结构