类的访问权限
类的访问权限有三种:
- public 公共权限: 可以被该类中的函数、子类的函数、其友元函数访问,也可以由该类的对象访问
- protected 保护权限: 可以被该类中的函数、子类的函数、以及其友元函数访问,但不能被该类的对象访问
- private 私有权限:只能由该类中的函数、其友元函数访问,不能被任何其他访问,该类的对象也不能访问。
三种权限的区别:
- public:可以被任意实体访问
- protected:只允许本类及子类的成员函数访问
- private:只允许本类的成员函数访问
继承
继承的方式有三种:
- 公共继承
- 保护继承
- 私有继承
继承后的属性变化:
- 使用private继承,基类的所有方法在子类中变为private;
- 使用protected继承,将基类中public成员变为子类的protected成员,其它成员的访问权限不变;
- 使用public继承,基类中的方法属性不发生改变;
保护成员的作用:
假如基类Base中有一个成员b,设计要求隐藏这个成员,但是在派生类的成员函数中又经常访问到。如何设计呢?
- 选择public,那么其安全性受到威胁。
- 选择private,派生类无法访问这个数据,只能间接访问。
所以我们有了protected!像上述b这种,出于隐藏的目的不能设为公有public,但又需要在派生类的成员函数中经常访问到的基类成员,将它们设置为保护成员,既能起到隐藏的目的,又避免了派生类成员函数要访问它们时只能间接访问所带来的麻烦。
保护成员的可访问范围比私有成员大,比公有成员小。能访问私有成员的地方都能访问保护成员。
保护成员扩大的访问范围表现在:基类的保护成员可以在派生类的成员函数中被访问。
示例:
#include<iostream>
using namespace std;
class Base{
public: int a;
protected: int b;
private: int c;
};
class son:public Base{
void show(){
cout<<a<<endl; //可访问 public权限
cout<<b<<endl; //可访问 protected权限
//cout<<c<<endl; //不可访问
}
};
int main() {
son A;
cout<<A.a<<endl; //对象可以访问public成员
//cout<<A.b<<endl; //protected无法访问
return 0;
}