2011-02-27 132 views
0

在Sutter發現的類設計指南& Alexandrescu的編碼標準書,等等,是使基類抽象,使得不能實例化它們。這是爲了防止a.o.切片和多態分配和複製的問題。從葉類繼承

但是,當使用類庫例如Qt,通常的做法是從庫中的concrdete類繼承來添加額外的行爲。例如,可以創建一個繼承自QListBox的類MyListBox,爲我的應用程序中的所有列表框添加特定於應用程序的行爲。

這種常見做法如何與建議擁有非instantiatiable基類協調一致?

回答

2

你的第一個句子中包含你正在尋找的答案:

類設計方針在薩特& Alexandrescu的的編碼標準書

(重點煤礦)找到。

這只是 - 一個指導方針,而不是一個石刻的規則。

如果你有具體的技術性限制,例如在圖書館使用的是,你可能忽略它,如果在該特定時刻給定的替代方案是這樣糟糕的(就像使用該三倍總量一定的規律性代碼或不得不重寫庫)。

我的答案的重點:所有這些模式,指導方針和最佳實踐都是達到您的編程目標的手段。他們本身不是目標。

2

該指南只適用於基類不應該實例化(通常因爲這樣做是沒有意義的)。在你的例子中情況並非如此:例如,僅僅因爲你從QDialog繼承,並不意味着你不想在代碼的其他地方使用普通的舊版本QDialog