我有三个彼此紧密耦合的课程,我想同时专攻这三个课程。三个派生类应该使用与超类相同的接口相互通信,另外还有一些我将在派生版本中添加的额外接口。是否有一种合理的模式可以用来在 C++ 中实现这种“同时推导”关系?
更具体地说:我正在扩展一个显示和编辑图形的 UI 组件。涉及三个类:
- CGraph,UI 小部件本身;
- CSeries,保存数据并由 CGraph 操作;
- CValue,代表系列中的一个值,其列表归CSeries所有。
我计划添加派生类 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
例如,我遇到的问题是 CSeries 在其定义中引用了 CValue:
class CSeries
{
public:
CValue & FindValue(/* stuff */);
private:
vector<CValue> m_values;
};
在 CNewSeries 中,它应该是 CNewValue 的向量,而 FindValue 应该返回一个 CNewValue 引用,等等。类似地,CGraph 在其定义中引用了 CSeries,但 CNewGraph 应该使用 CNewSeries。