我希望這個問題還沒有在其他地方得到解答,我確實搜索了一個答案,但是不能很好地規範搜索。C++當派生類沒有從接口實現函數時該怎麼辦
問題是,我有一個武器抽象類武器需要的統計數據(如準確性,損壞等)。這是一個抽象類,因爲有些武器對重裝和破壞有不同的實現方式,但其中大多數武器沒有。
Weapon類具有DoT(結構體)成員以及getDoT成員函數。
問題是,並非所有的武器都有DoT。但是在代碼中的某個時刻,在處理攻擊時,Weapon :: getDoT被調用。當然,我之前添加了「has_DoT()」方法,所以我不處理單元化的DoT對象,但這是一個相當糟糕的解決方案。
處理這個問題的最佳方法是什麼?當並非所有派生對象實際上都擁有抽象類中的成員?
我以爲首先沒有DoT成員/ getDoT成員函數,只是在派生類Weapon_With_DoT上實現它們,但由於我的抽象類是Weapon,我仍然需要檢查是否武器有一個DoT,然後從武器類型轉換爲Weapon_With_DoT來訪問Weapon_With_DoT :: getDoT成員函數。這也是不合理的,只是相反。
我希望問題能夠以足夠清晰的方式解釋。 :)
如果不是所有的武器都有DoT,那麼它可能不應該在頂級抽象類中。是否有武器的子類具有該屬性?我會考慮爲什麼一些武器有這個屬性,有些不是從設計的角度來看。 – Joe
喬是絕對正確的。應該使用頂級抽象類來定義常見行爲。這種差異應該定義在較低的水平。 – Greg
事後看來,只有在界面中定義了常見行爲纔有意義,但如果代碼的其餘部分使用武器作爲界面,您將如何處理該問題? – deso