我有三個彼此緊密耦合的類,我想同時專門化所有三個類。這三個派生類應該使用與超類相同的接口相互交談,另外還要添加一些其他接口,我將在派生版本中添加這些接口。有沒有一種合理的模式可以用來在C++中實現這種「同時派生」關係?如何在C++中同時子類化幾個類?
更具體地說:我正在擴展顯示和編輯圖形的UI組件。有三類涉及:
- CGraph,UI部件本身; CSeries,它保存數據並由CGraph操作;
- CValue,表示系列中的一個值,其列表由C系列擁有。
我計劃添加派生類CNewGraph,CNewSeries和CNewValue(佔位符名稱)。
CGraph ---views/edits---> CSeries ---owns list of---> CValue
^ ^ ^
| is-a | is-a | is-a
| | |
CNewGraph ---views/edits---> CNewSeries ---owns list of---> CNewValue
那種問題,我碰到這個是C系列,例如,是指CValue在它的定義:
class CSeries
{
public:
CValue & FindValue(/* stuff */);
private:
vector<CValue> m_values;
};
在CNewSeries,這應該是CNewValue的載體,而是和FindValue應該返回一個CNewValue引用等。同樣,CGraph在其定義中引用CSeries,但CNewGraph應該使用CNewSeries。