我有一個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