我有一个Parts列表,其中一些需要一个指向Engine的指针,让我们称它们为EngineParts。我想要的是使用RTTI查找这些EngineParts,然后为它们提供引擎。通过基类提供依赖关系
问题是如何设计EnginePart。我在这里有两个选项,如下所述,我不知道选择哪一个。 选项1速度更快,因为它没有虚拟功能。 如果我想Clone()对象,选项2更容易,因为没有数据,它不需要Clone()函数。
有什么想法?也许还有第三种选择?
选项1:
class Part;
class EnginePart : public Part {
protected: Engine *engine
public: void SetEngine(Engine *e) {engine = e}
};
class Clutch : public EnginePart {
// code that uses this->engine
}
选项2:
class Part;
class EnginePart : public Part {
public: virtual void SetEngine(Engine *e)=0;
};
class Clutch : public EnginePart {
private: Engine *engine;
public: void SetEngine(Engine *e) { engine = e; }
// code that uses this->engine
}
(请注意,实际情况更为复杂一些,我不能使用像创建一个简单的解决方案EngineParts的单独列表)
谢谢
也许我应该详细说明一下。它实际上是一个从磁盘加载的图形和n元树的混合体,而零件是由加载程序使用抽象工厂创建的。前n个部分需要一些全局属性(我使用Engine作为示例属性),它们不包含在图本身中。所以这就是为什么我不能在构造函数中提供它,我必须在之后“注入”它。 – Eric 2010-02-06 21:40:06