看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《cory8249 (Cory)》之銘言: : 問題(Question): : 請問如何正確規劃、分割 class 與 header 架構 ? : 小弟目前寫一個 CPU 模擬器 : 開了以下幾個 class : : Core, Instruction, Memory, Regsiter, ALU, Controller : 不曉得怎麼檔案架構分割比較好 : 想請教板上各位高手 : 首先 Core 是最大的一個 class 內部包含 Instruction , Memory ... 等等 : 而 ALU , Controller 又需要存取 Instruction , Memory, Register : 1. : 那這樣在 Core.h 的 class Core 宣告中 要用 forward declaration 嗎 ? : 例如: : class ALU; : class Controller; : class Memory; : class ... : class Core{ : public: : .... : private: : Memory *imem, *dmem; // OK : ALU alu; // compile error : field alu has incomplete type : Controller controller; // compile error : field ... has incomplete type : }; : forward delclaration 似乎只能用 pointer 的方式 ? : 所以在 Core 裡面包含的其他 class 看似都要用 pointer 囉 ? 對,這我也有想過,不過在c++中一定要這樣用 不然會 include 迴圈就編不過 : 2. : 因為有很多訊號、指令等等 我想開 enum 去寫 : 但是 enum 好像只能宣告定義一次而已 : 假設我在 Instruction.h 中定義了 enum InstType { R_TYPE, I_TYPE, J_TYPE }; : 但是 ALU 、 Controller 中也需要用到這個 enum : 所以 ALU 、 Controller 要 #include "Instruction.h" ? 對,所以你可以定一個 .h 檔,專門去定義 enum 或 const int 常數 : 3. : 因為 ALU , Controller 會互相存取資料、 call function 等等 : Header include 要怎麼寫比較好 ? : 可以互設為 friend class 嗎 ? : class ALU; : class Controller{ : public: : friend class ALU; : private: : ... : } : 像是這樣 ? : 問題有點多 不好意思 麻煩各位了 感謝 用 public GetXXX() 函數的方式拿, friend 沒有 public private 的分別 他永遠是你的好朋友 :) 不然的話你用有MVC的感覺 ALU 分成 ALU_Model ALU_View ALU_Control 放rawdata 放資料轉型或處理 放控制指令 我的感覺是你可以再參考一下 設計模式裡的 singleton 來拿資料 Iterator 跟 Command 來處理指令 Strategy 來產生不同的 memory model 然後抱著一定會打掉重練的心情去寫程式吧~ 才不會得失心太重,第一次寫總是會有一堆問題的, 不太可能一步到位的。 -- 【板主:memy/cat0405/icyfang】[LoL] ILP 5 : TPA vs. Fnatic 看板《LoL》 [←]離開 [→]閱讀 [Ctrl-P]發表文章 [d]刪除 [z]精華區 [i]看板資訊/設定 [h]說明 編號 日 期 作 者 文 章 標 題 人氣:8912 m爆12/01 Xargon □ [電競] IPL5 世界,總決賽。 Day2 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.118.175.39 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1399821496.A.1D3.html
cory8249:感謝!! 事實上我已經砍一大半重練了 QQ 05/11 23:31