temporysecretary
class繼承自secretary
和tempory
,因此它同時擁有後兩者的特性,以及其他可能的更多特性。這導致一種想法:多重繼承可能有助於處理」設計組合「----通過少量的、明確選擇後的基類。這麼一來,使用者藉由basesmartptr、multithreaded和refcounter,就可以製作出具有多執行緒能力、引用計數功能的智慧型指標。不過,任何一位有經驗的類設計者都知道,這樣天真的設計方式其實無法運作。
分析多重繼承的失敗原因,有助於產生根據彈性的設計,這可以對健全的設計方案提供一些有趣的想法。通過多重繼承機制來組合多項功能,會產生如下問題:
雖然本質上是組合,但是多重繼承無法單獨解決設計時的多樣性選擇
注意:c++並不提倡多重繼承模板是一種很適合」組合各種行為「的機制,主要是因為它們是」依賴使用者提供的型別資訊「並且」在編譯期才產生「的**
和一般的類不同,類模板可以以不同的方式定製。如果想要針對特定情況來設計類,你可以在你的類模板中特化其成員函式。舉個例子,如果有乙個smartptr
,你可以針對smartptr
特化其任何成員函式。這可以為你在設計特化行為時提供更好的粒度。
甚至,對於帶有多個引數的類模板,你可以採用偏特化。它可以讓你根據部分引數來特化乙個類模板。比如:
template
<
classt,
class
u>
class
smartptr
;
你可以令smartptr< t, u>針對widget以及其他任意型別加以特化:
template
<
class
u>
class
smartptr
;
模板的編譯期特性以及」可相互組合「特性,使它在設計期非常引人注目。然而你一旦開始嘗試做這些設計,你會遭遇一些問題:
template
<
class
t>
class
widget;}
;// ok
template
<
>
void widget<
char
>
::func()
template
<
classt,
class
u>
class
gadget;}
;// error: 因為這裡member function的explicit specialization並無偏特化機制
template
<
class
u>
void gadget<
char
, u>
::func()
從上面我們可以看出:模板和多重繼承是互補的。多重繼承欠缺技術,模板有豐富的技術。多重繼承缺乏型別資訊,而模板中大量存在型別資訊。模板的特化無法擴張,多重繼承容易擴張。你只能為模板成員函式寫乙份預設版本,但是你可以寫數量無需的基類
因此,如果我們將模板和多重繼承組合起來,將會產生非常具有彈性的裝置,應該很適合用於產生程式庫的」設計元素「
c 多重繼承與模板類繼承
在很多大型系統中,c 多重繼承很多 一般是純虛函式實現介面類,多重繼承的類,都是不能定義本身物件的虛函式類,大多是純虛函式類。純虛函式類沒有成員物件,所有的類函式都是純虛函式。例如 class ia public cobject virtual int send 0 class ib public ...
C 類的多重繼承與虛擬繼承
摘自 http tech.ddvip.com 2006 12 116512057312798.html 在過去的學習中,我們始終接觸的單個類的繼承,但是在現實生活中,一些新事物往往會擁有兩個或者兩個以上事物的屬性,為了解決這個問題,c 引入了多重繼承的概念,c 允許為乙個派生類指定多個基類,這樣的繼...
C 類的多重繼承與虛擬繼承
在過去的學習中,始終接觸的單個類的繼承,但是在現實生活中,一些新事物往往會擁有兩個或者兩個以上事物的屬性,為了解決這個問題,c 引入了多重繼承的概念,c 允許為乙個派生類指定多個基類,這樣的繼承結構被稱做多重繼承。舉個例子,交通工具類可以派生出汽車和船連個子類,但擁有汽車和船共同特性水陸兩用汽車就必...