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

明智而審慎地使用多重繼承
使用多重繼承就是一個類同時繼承多個類,這就可能會出現(xiàn)幾個父類有同名接口,而在子類中調(diào)用這個名字的接口的時候會出現(xiàn)歧義。
其實哪怕對于 base2 是 private 繼承,也同樣是默認兩可的,C++ 檢查函數(shù)調(diào)用的時候,private 接口和 public 接口可能具有相同的匹配程度,從而導(dǎo)致無法分辨。
如果想要解決這個歧義,你必須在調(diào)用的時候就區(qū)分清楚
還有一種繼承就是菱形繼承
如果在這個例子中,F(xiàn)ile 有一個接口 fun,那么 InputFile 和 OutputFile 也有一個 fun,此時 IOFile 就有兩個 fun 了。這雖然有點難以接受,但是卻是事實。如果你希望 IOFile 只有一份 fun,你可以使用 virtual?繼承。
這樣 IOFile 就只有一份 fun。但是這也有壞處,就是 virtual? 繼承的類體積往往比 non-virtual 繼承而來的更大,而且訪問 virtual base classes 成員變量所需要的時間也更長。這就是 virtual 繼承的代價。
而且派生自 virtual base 的類如果需要初始化,就必須知道其 virtual base 的細節(jié)(定義),本例中的 IOFile 如果初始化必須知道 File 的定義。
如果不得不使用 virtual base,那么請盡量避免在其中放入數(shù)據(jù),以免引起不必要的麻煩。
多重繼承也有其好處,前面提到過 public?繼承可以繼承接口,private 繼承實現(xiàn),那么可以讓 derived 繼承 base1 的接口,而繼承 base2 的實現(xiàn)。