Effective C++ 第四十条 Use multiple inheritance judiciously.

明智而审慎地使用多重继承
使用多重继承就是一个类同时继承多个类,这就可能会出现几个父类有同名接口,而在子类中调用这个名字的接口的时候会出现歧义。
其实哪怕对于 base2 是 private 继承,也同样是默认两可的,C++ 检查函数调用的时候,private 接口和 public 接口可能具有相同的匹配程度,从而导致无法分辨。
如果想要解决这个歧义,你必须在调用的时候就区分清楚
还有一种继承就是菱形继承
如果在这个例子中,File 有一个接口 fun,那么 InputFile 和 OutputFile 也有一个 fun,此时 IOFile 就有两个 fun 了。这虽然有点难以接受,但是却是事实。如果你希望 IOFile 只有一份 fun,你可以使用 virtual 继承。
这样 IOFile 就只有一份 fun。但是这也有坏处,就是 virtual 继承的类体积往往比 non-virtual 继承而来的更大,而且访问 virtual base classes 成员变量所需要的时间也更长。这就是 virtual 继承的代价。
而且派生自 virtual base 的类如果需要初始化,就必须知道其 virtual base 的细节(定义),本例中的 IOFile 如果初始化必须知道 File 的定义。
如果不得不使用 virtual base,那么请尽量避免在其中放入数据,以免引起不必要的麻烦。
多重继承也有其好处,前面提到过 public 继承可以继承接口,private 继承实现,那么可以让 derived 继承 base1 的接口,而继承 base2 的实现。