派生类的多重继承

如题所述

第1个回答  2016-05-18

C++的后期的一些版本为继承引入了“多重继承”模式。在一个多重继承的图中,派生类可以有多个直接基类。
对于一个特定的程序如果每个类的属性并不是全部要求使用,则每个类可以单独使用或者同别的类联合在一起使用。
虚基类层次 有一些类层次很庞大,但有很多东西很普遍。这些普遍的代码在基类中实现了,然而在派生类中又实现了特殊的代码。
对于基类来说重要的是建立一种机制,通过这种机制派生类能够完成大量的函数机能。
这种机制通常是用虚函数来实现的。有时,基类为这些函数提供了一个缺省的实现。
了解到所有的Identify和WhereIs的函数实现返回的是同种类型的信息,这一点很重要。在这个例子中,恰好是一种描述性字符串。
这些函数可以作为虚拟函数来实现,然后用指向基类的指针来调用,对于实际代码的联结将在运行时决定,以选择正确的Identify和WhereIs函数。
类协议的实现
类可以实现为要强制使用某些协议。这些类称为“抽象类”,因为不能为这种类类型创建对象。它们仅仅是为了派生别的类而存在。
当一个类中含有纯虚拟函数或当他们继承了某些纯虚拟函数却又没有为它们提供一个实现时,该类称为抽象类。纯虚拟函数是用纯说明符定义的虚拟函数。如下:
virtual char *Identify()=0;
基类Document把如下一些协议强加给派生类。
* 为Identify函数提供一个合适的实现
* 为WhereIs函数提供一个合适的实现
在设计Document类时,通过说明这种协议,类设计者可以确保如不提供Identify和WhereIs函数则不能实现非抽象类。因而Document类含有如下说明:
class Document
{
public:
...
//对派生类的要求,它们必须实现下面这些函数
virtual char *Identify()=0;
virtual char *WhereIs()=0;
...
};

相似回答