1、类成员的三种类型
public成员可以被任何类访问,
protected成员限于自己和子类访问。在同一个类中使用,其访问权限相当于私有成员;但是在派生时,他的访问权限相当于公有成员
private成员限于自己访问,即仅可在自己的类内使用。
2、对于公有继承方式:
·基类成员对派生类的可见性对派生类来说,
基类的公有成员和保护成员可见:基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态;
基类的私有成员不可见:基类的私有成员仍然是私有的,派生类不可访问基类中的私有成员。
所以, 对派生类对象来说,基类的公有成员是可见的,其他成员是不可见。在公有继承时,派生类的对象可以访问基类中的公有成员;派生类的成员函数可以访问基类中的公有成员和保护成员。
3、对于私有继承方式:
·基类成员对派生类的可见性对派生类来说,
基类的公有成员和保护成员是可见的:基类的公有成员和保护成员都作为派生类的私有成员,并且不能被这个派生类的子类所访问;
基类的私有成员是不可见的:派生类不可访问基类中的私有成员。
所以,对派生类对象来说,基类的所有成员都是不可见的。在私有继承时,基类的公有和保护成员只能由直接派生类的成员(而非对象)访问,而无法再往下继承。
4、对于保护继承方式:
·基类成员对派生类的可见性对派生类来说,
基类的公有成员和保护成员是可见的:基类的公有成员和保护成员都作为派生类的保护成员,并且可以被其他成员访问,但是不能被这个派生类的对象所访问;
基类的私有成员是不可见的:派生类不可访问基类中的私有成员。
所以,对派生类对象来说,基类的所有成员都是不可见的。在保护继承时,基类的成员也只能由直接派生类的其他成员(而非对象)访问,而无法再往下继承。
这种继承方式与私有继承方式的情况相同。两者的区别仅在于对派生类的成员而言,但是,如果派生类作为新的基类继续派生时,二者会有明显区别 。
例如:B类以私有方式继承了A类后,B类又派生出新类C,那么C类的其他成员以及派生类的对象都不能访问间接从A类中继承来的成员(因为在B类中他们属于私有成员,不管以什么方式派生出C类,都无法访问私有成员)
如果B类以保护方式继承了A类后,B类由派生出新类C(假设以公有方式继承),那么C类的其他成员(其对象除外)就可以访问间接从A类中继承来的成员(因为在B类中他们属于保护成员,以公有继承的方式派生出C类后,就跟B类公有成员一样可以被访问)