09-保护继承
14.2.3 保护继承
保护继承是私有继承的变体。保护继承在列出基类时使用关键字protected:
class Student : protected std::string,
protected std::valarray<double>
{...};
使用保护继承时,基类的公有成员和保护成员都将成为派生类的保护成员。和私有继承一样,基类的接口在派生类中也是可用的,但在继承层次结构之外是不可用的。当从派生类派生出另一个类时,私有继承和保护继承之间的主要区别便呈现出来了。使用私有继承时,第三代类将不能使用基类的接口,这是因为基类的公有方法在派生类中将变成私有方法;使用保护继承时,基类的公有方法在第二代中将变成受保护的,因此第三代派生类可以使用它们。
表14.1总结了公有、私有和保护继承。隐式向上转换(implicit upcasting)意味着无需进行显式类型转换,就可以将基类指针或引用指向派生类对象。
| 特 征 | 公 有 继 承 | 保 护 继 承 | 私 有 继 承 | | :----- | :----- | :----- | :----- | :----- | :----- | | 公有成员变成 | 派生类的公有成员 | 派生类的保护成员 | 派生类的私有成员 | | 保护成员变成 | 派生类的保护成员 | 派生类的保护成员 | 派生类的私有成员 | | 私有成员变成 | 只能通过基类接口访问 | 只能通过基类接口访问 | 只能通过基类接口访问 | | 能否隐式向上转换 | 是 | 是(但只能在派生类中) | 否 |