C++ private和protected派生(私有和保护派生)

除了公有派生(继承),C++ 还支持私有派生(继承)和保护派生(继承)。具体写法是在派生类定义的“继承方式说明符”位置写 private 或 protected。例如:
class B:private A{ };  //私有派生
class C:protected A{ };  //保护派生
不同派生方式会导致基类的成员在派生类中的可访问范围属性不同,如表 1 所示。

表1:不同派生方式下基类成员在派生类中的可访问范围属性
基类成员 派生方式
公有派生 私有派生 保护派生
私有成员 不可访问 不可访问 不可访问
保护成员 保护 私有 保护
公有成员 公有 .私有 保护
 

举一个例子说明该表的解读方法:第四行第三列说明,基类的公有成员经过私有派生后,在派生类中变为私有成员。其他情况以此类推。

类的“不可访问”成员指的是类的成员函数内部也不能访问的成员。例如,基类的私有成员在派生类的成阜函数内就不能访问,但它依然是派生类的成员,因此说基类的私有成员在派生类中成为不可访问成员。

假设基类 A 私有派生出类 B,类 B 又派生出类 C。依据上表,经过私有派生后,类 A 的公有成员 x 在类 B 中成为私有成员,于是在类 C 的成员函数中就不能访问 x 了,因为在派生类的成员函数中不能访问基类的私有成员。

一般情况下都应使用公有派生。