当前位置:嗨网首页>书籍在线阅读

09-保护继承

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

14.2.3 保护继承

保护继承是私有继承的变体。保护继承在列出基类时使用关键字protected:

class Student : protected std::string,
                protected std::valarray<double>
{...};

使用保护继承时,基类的公有成员和保护成员都将成为派生类的保护成员。和私有继承一样,基类的接口在派生类中也是可用的,但在继承层次结构之外是不可用的。当从派生类派生出另一个类时,私有继承和保护继承之间的主要区别便呈现出来了。使用私有继承时,第三代类将不能使用基类的接口,这是因为基类的公有方法在派生类中将变成私有方法;使用保护继承时,基类的公有方法在第二代中将变成受保护的,因此第三代派生类可以使用它们。

表14.1总结了公有、私有和保护继承。隐式向上转换(implicit upcasting)意味着无需进行显式类型转换,就可以将基类指针或引用指向派生类对象。

表14.1 各种继承方式

| 特 征 | 公 有 继 承 | 保 护 继 承 | 私 有 继 承 | | :----- | :----- | :----- | :----- | :----- | :----- | | 公有成员变成 | 派生类的公有成员 | 派生类的保护成员 | 派生类的私有成员 | | 保护成员变成 | 派生类的保护成员 | 派生类的保护成员 | 派生类的私有成员 | | 私有成员变成 | 只能通过基类接口访问 | 只能通过基类接口访问 | 只能通过基类接口访问 | | 能否隐式向上转换 | 是 | 是(但只能在派生类中) | 否 |