20 December 2022

C++ 核心指南目录

C.135: Use multiple inheritance to represent multiple distinct interfaces

理由

并非所有的类要支持所有的接口。也并非所有的调用处都必须处理所有的操作。因此,可以通过派生类将一组庞大的接口拆分成不同的行为侧面。

例子

class iostream : public istream, public ostream {   // very simplified
    // ...
};

istream 提供输入操作的接口, ostream 提供输出操作的接口。 iostream 提供 istreamostream 操作的合集,以及输入输出需要的同步操作。

注意

这是经常用到继承的地方,因为某个实现需要多个不同的接口,而这些接口又很难通过单一根节点的继承层级来实现。

这些接口通常都是抽象类。