对于基类的私有成员,不论派生类型如何,派生类及派生类的使用者都无权访问;
对于基类的保护成员,不论派生类型如何,派生类可以访问,但派生类的使用者无权访问;
对于基类的公有成员,按派生类型,分三类情况:
私有派生:继承后变成派生类的私有成员,派生类可以访问,但派生类的使用者不能访问;
保护派生:继承后变成派生类的保护成员,派生类可以访问,但派生类的使用者不能访问;
公有派生:继承后变成派生类的公有成员,派生类和派生类的使用者都能访问;
派生类可以访问:在派生类的成员函数中可以访问,即在派生类的成员函数中可以被使用;
派生类的使用者:即定义的派生类的对象,或者使用该派生类的函数;
派生类的使用者不能访问:即使用对象访问符号“.”不能访问其成员;也即在(派生)类外不能访问;
派生类的继承权与访问权,总结如下两个表:
基类成员性质
|
派生类型
|
在派生类中的性质
|
在派生类中能否访问
|
派生类对象能否访问
|
Private
|
Private
私有派生
|
不可访问
|
不能访问
|
不能访问
|
Protected
|
Private
|
可以访问
|
不能访问
| |
Public
|
Private
|
可以访问
|
不能访问
| |
Private
|
Protected
保护派生
|
不可访问
|
不能访问
|
不能访问
|
Protected
|
Protected
|
可以访问
|
不能访问
| |
Public
|
Protected
|
可以访问
|
不能访问
| |
Private
|
Public
公有派生
|
不可访问
|
不能访问
|
不能访问
|
Protected
|
Protected
|
可以访问
|
不能访问
| |
Public
|
Public
|
可以访问
|
可以访问
|
基类成员性质
|
派生类型
|
在派生类中的性质
|
在派生类中能否访问
|
派生类对象能否访问
|
Private
|
Private
|
不可访问
|
不能访问
|
不能访问
|
Protected
|
不可访问
|
不能访问
|
不能访问
| |
Public
|
不可访问
|
不能访问
|
不能访问
| |
Protected
|
Private
|
Private
|
可以访问
|
不能访问
|
Protected
|
Protected
|
可以访问
|
不能访问
| |
Public
|
Protected
|
可以访问
|
不能访问
| |
Public
|
Private
|
Private
|
可以访问
|
不能访问
|
Protected
|
Protected
|
可以访问
|
不能访问
| |
Public
|
Public
|
可以访问
|
可以访问
|
派生类不能访问基类的私有成员,若要访问必须使用基类的接口,即通过其成员函数。
若要直接访问,有两种方法:
在类定义体中增加保护段(protected),将基类私有成员提供派生类访问的部分放置在保护段;派生类对基类的保护成员的继承与公有成员类似,若为公有派生,则在派生类中也处于保护段;若为私有派生,则在派生类中变为私有成员。
将需要访问基类私有成员的派生类成员函数声明为基类的友元。