本文主要是介绍表 14.1特 征公有成员变成保护成员变成私有成员变成能杏隐式向上转换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
{ -. }:
不同种类的继承
公有继承
派生类的公有成员
派生类的保护成员
只能通过基类接口访问
是
保护继承
派生类的保护成员
派生类的保护成员
只能通过基类接口访问
是(但只能在派生类中)
私有继承
派生类的私有成员
派生类的私有成员
只能通过基类接口访问
否
83 89 72 78 95
average: 83.4
Scores for Fleur O'Day:
92 89 96 74 64
average: 83
Done.
输入与前 个测试程序相同,输出也相同。
6. 使用包含还是私有继承
由丁既可以使用包含,也可以使用私有继承来建立has-a关系,那么应使用种方式呢?大多数C++程
序员倾向于使用包含。首先,它易于理解。类声明中包含表示被包含类的显式命名对象,代码可以通过名
称引用这些对象,而使用继承将使关系更抽象。其次,继承会引起许多问题,尤其从多个基类继承时,可
能必须处理许多问题,例如包含同名方法的独立的基类,或共享祖先的独立基类。总之,使用包含不太可
能遇到这样的麻烦。另外,包含能够包括多个同类的子对象。如果某个类需要3个string对象,可以使用
包含声明3个独立的string成员。而继承则只能使用一个这样的对象(当对象都没有名称时,将难以区分)。
不过,私有继承所提供的特性确实比包含多。例如,假设类包含保护成员(可以是数据成员,也可以
是成员函数),则这样的成员在派生类中是可用的,但在继承层次结构外是不可用的。如果使用组合将这样
的类包含在另一个类中,则后者将不是派生类,而是位于继承层次结构之外,因此不能访问保护成员。但
通过继承得到的将是派生类,因此它能够访问保护成员。
另,种需要使用私有继承的情况是需要重新定义虚函数。派生类可以重新定义虚函数,但包含类不能。
使用私有继承,重新定义的函数将只能在类中使用,而不是公有的。
提示:通常,应使用包含来建立has-a关系;如果新类需要访问原有类的保护成员,或需要重新定义
虚函数,则应使用私有继承
7. 保护继承
保护继承是私有继承的变体。保护继承在列出基类时使用关键字 protected:
class Student : protected std :: string,
protected std: :valarray<double>
使用保护继承时,基类的公有成员和保护成员都将成为派生类的保护成员。和私有继承一样,基类的
接11在派生类中也是可用的,但在继承层次结构之外是不可用的。当从派生类派生出另一个类时,私有继
承和保护继承之间的主要区别便呈现出来了。使用私有继承时,第三代类将不能使用基类的接口,这是因
为基类的公有方法在派生类中将变成私有方法:使用保护继承时,基类的公有方法在第二代中将变成受保
护的,因此第代派生类可以使用它们。
表14.1总结了公有、私有和保护继承。隐式向上转换(implicit upcasting)意味着无须进行显式类型转
换,就可以将基类指针或引用指向派生类对象。
表 14.1
特 征
公有成员变成
保护成员变成
私有成员变成
能杏隐式向上转换
8. 使用using 重新定义访问权限
使用保护派生或私有派生时,基类的公有成员将成为保护成员或私有成员。假设要让基类的方法在派
生:类外面可用,方法之一是定义一个使用该基类方法的派生类方法。例如,假设希望 Student 类能够使用
这篇关于表 14.1特 征公有成员变成保护成员变成私有成员变成能杏隐式向上转换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!