不用通過多重繼承就可以實作多套接口,同時可以自然地向上轉換(Up-casting)。
在單個抽象下提供相同接口的多個實作。
兩個獨立類庫通過不同的接口提供的虛函數簽名可能沖突,如果這時需要同時實作這兩個函數就會出現問題。示例如下:
内部類慣用法就是用來解決這個問題。
仍然是上面的例子,兩個基類不用修改,改用如下方式實作子類:
附個類圖便于了解:
這裡的類Derived并不是子類,而是通過内部的兩個嵌套類實作不同的接口,再橋接回到自己定義的兩個實作的函數: base1_open及base2_open。兩個嵌套類不會共享繼随關系,通過Derived類提供的兩個轉換操作符可以實作Derived轉換到任意的基類。另外兩個内部類對象也免去了額外的生命周期管理,它們的生命周期與Derived對象一緻。
譯注:
Inner Class的概念來自于Java, 其本特征是嵌套類通過友元的方式可以使用外部類的私有成員變量和成員函數,進而支援更強的互動。而且通常這個内部類需要是私有的。
以Chromium網絡子產品的Http Cache為例:
這是一個簡單的例子,并沒有多重繼承。更多的是強調了封裝和資訊隐藏(HttpCache::Transaction是HttpCache内私有的類)的OO特性。
Interface Class
Capability Query
Thinking in C++ Vol 2 - Practical Programming — by Bruce Eckel.