除了公有派生(继承),C++ 还支持私有派生(继承)和保护派生(继承)。具体写法是在派生类定义的“继承方式说明符”位置写 private 或 protected。例如:
class B:private A{ }; //私有派生
class C:protected A{ }; //保护派生
不同派生方式会导致基类的成员在派生类中的可访问范围属性不同,如表 1 所示。
基类成员 | 派生方式 | ||
公有派生 | 私有派生 | 保护派生 | |
私有成员 | 不可访问 | 不可访问 | 不可访问 |
保护成员 | 保护 | 私有 | 保护 |
公有成员 | 公有 | .私有 | 保护 |
举一个例子说明该表的解读方法:第四行第三列说明,基类的公有成员经过私有派生后,在派生类中变为私有成员。其他情况以此类推。
类的“不可访问”成员指的是类的成员函数内部也不能访问的成员。例如,基类的私有成员在派生类的成阜函数内就不能访问,但它依然是派生类的成员,因此说基类的私有成员在派生类中成为不可访问成员。
假设基类 A 私有派生出类 B,类 B 又派生出类 C。依据上表,经过私有派生后,类 A 的公有成员 x 在类 B 中成为私有成员,于是在类 C 的成员函数中就不能访问 x 了,因为在派生类的成员函数中不能访问基类的私有成员。
一般情况下都应使用公有派生。