我有一个零件列表,其中一些需要一个指向引擎的指针,我们称它们为 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创建单独的列表)
谢谢