众所周知,C++类中的成员(函数/变量)拥有三种访问权限:
public:用该关键字修饰的成员表示公有成员,该成员不仅可以在类内可以被访问,在类外也是可以被访问的,是类对外提供的可访问接口;
private:用该关键字修饰的成员表示私有成员,该成员仅在类内可以被访问,在类体外是隐藏状态;
protected:用该关键字修饰的成员表示保护成员,保护成员在类体外同样是隐藏状态,但是对于该类的派生类来说,相当于公有成员,在派生类中可以被访问。
对一个类的派生类来说,在继承基类的过程中,不仅包含了基类的所有成员,还增加了自己的成员,而派生类中成员的访问权限则会因为继承权限方式的不同而不同。
相对于派生类成员的访问权限比较简单(派生类成员的访问权限就是取决于派生类中定义的权限),从基类中继承的成员的访问权限就相对较为复杂,这并不是简单地照搬基类的成员访问权限。基类成员在派生类中的访问权限与继承的方式有着密切的关系,在不同的继承方式下,访问权限也是不同的,总结如下:
**若继承方式是public,基类成员在派生类中的访问权限保持不变,也就是说,基类中的成员访问权限,在派生类中仍然保持原来的访问权限;**
**若继承方式是private,基类所有成员在派生类中的访问权限都会变为私有(private)权限;**
**若继承方式是protected,基类的共有成员和保护成员在派生类中的访问权限都会变为保护(protected)权限,私有成员在派生类中的访问权限仍然是私有(private)权限。**
注意:
- C++中struct与class的唯一区别是类内成员struct默认为public,class默认为private。
- 同一类的对象之间类内可以互相访问任意成员,派生类与基类之间类内可访问除私有成员外的任意成员,所有类外只能访问公有成员。
- 无论哪种继承方式,基类的公有和保护成员都可以被派生类的成员访问。
- 无论哪种继承方式,基类的私有成员都不可以被派生类的成员和对象访问。
- 只有公有继承时,基类的公有成员才可以被派生类的对象访问。
- 在被继承时,基类的保护成员及和公有成员行为一致。
- 在被类的对象访问时,保护成员和私有成员的行为一致。