[問題] 繼承架構設計問題..

看板C_and_CPP作者 (一天死去一點)時間15年前 (2009/04/14 09:15), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/2 (看更多)
Hi 大家好, 最近遇到一個問題,想向大家請教一下: 基本上 class 架構的概念是這樣: // interfaces class Base; class BaseManager { public: virtual void addItem(const Base& base) = 0; virtual const Base& getItem(size_t index) const = 0; }; // implementations class Derived : public Base; class DerivedManager : public BaseManager { private: std::vector<Base> itemsVec_; publuc: virtual void addItem(const Base& base); virtual const Base& getItem(size_t index) const; const Base& getItemFitSomeCondition(); // customized method } bool API_RetrieveItems(BaseManager& manager) { manager.addItem(...); ... } 概念上用起來像: DerivedManager mgr; API_RetrieveItems(mgr); // retrieve items const Base& b1 = mgr.getItem(0); const Base& b2 = mgt.getItemFitSomeCondition(); 現在遇到兩個問題: 1) 希望在 DerivedManager 的實做中用 vector 來管理元素,因為: 1. vector 管理方便。 2. 我希望在 DerivedManager 內保留的是 item 的 "副本",vector 會將元素拷貝一份的行為剛好符合所需。 但是因為 Base 只是 abstract class,所以無法產生 vector<Base>。 2) client 在使用上也會遇到問題,因為 Base 是 abstract,所以 API_RetrieveItmes 的設計者只看到 interface 的話,也無法產生 Base 物件來作為 addItem 的參數。 想請問一下像這樣的架構有什麼問題呢?有沒有更好的架構可以使用? 學藝不精請多指教 m(_ _)m -- 雁子回到了遙遠的北方 妳的名字我已想不起來 別怪我 生命太匆忙 http://blog.xamous.net -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 192.35.156.165 ※ 編輯: xamous 來自: 192.35.156.165 (04/14 09:19) ※ 編輯: xamous 來自: 192.35.156.165 (04/14 09:20)
文章代碼(AID): #19u-ENsz (C_and_CPP)
文章代碼(AID): #19u-ENsz (C_and_CPP)