看板 C_and_CPP 關於我們 聯絡資訊
: ※ 引述《maboroshiga (幻)》之銘言: : 我原有一個資料庫的處理程式碼 比如說 Db.h 跟 Db.cpp : 裡面(只)有一個class 比如說叫 CDb 好了 : 這個class內有資料庫的建立/開啟/刪除 : 以及5個資料表的新增/刪除/修改 : 如果我覺得這個class太長 想依照資料表分成不同檔案 請問可行嗎? : .cpp 應該是ok的 直接在 Db.cpp include就好 反正都是 CDb::FunctionName() : 那header的部分要怎麼辦? 都寫 class CDb(){ .. } 一定不行 : 有什麼建議的方法嗎? 感謝~~! 你應該修改你的 class 設計 把「資料表」獨立成一個 class 然後讓「資料庫」「擁有」五張「資料表」 一般來說 class 的宣告一定會全部放進同一個 header file 中 但它的實作可以分散在許多不同的 .cpp
hilorrk:分成不同class 用繼承? 10/27 20:17
請千萬不要這麼做 繼承不是拿來這樣惡搞的
maboroshiga:嗯有想過class CDb繼承5個table的class 10/27 20:33
maboroshiga:只是不知道這樣會不會影響效能 10/27 20:33
layan:應該不會, 除非你有 virtual function, 不然不會 10/27 22:13
多重繼承會影響效能 因為在呼叫 member function 時 this pointer 必須視情況加上一個 offset 不過這不是什麼大問題 最大的問題是 這種情況違反了界面繼承的原則 CDb 並不是 (is-a) 一種 table 而是含有 (has-a) 一些 table
VictorTom:其實我覺得, .cpp可以分開實作, 但.h的宣告仍然通通包在 10/27 22:14
VictorTom:一起就可以了吧?_? 10/27 22:14
對 這是正道
layan:話說 你可以在 class XXX { } <= 裡面 include "xxx.inl" 10/27 22:29
layan:也就是說你可以把五個表的函式寫在 5 個 xxx.inl files 裡 10/27 22:29
layan:然後在你的 class CDb { } <= 裡面寫 #include 它們就行了 10/27 22:30
layan:不過這樣很鳥 XDXD 看的人也痛苦 10/27 22:30
layan:不見得要.inl,附檔名.h也行,只是以前看到的做法是用.inl 10/27 22:31
寫 inline function 才需要這樣 一般的 member function 可以分散寫在不同的 .cpp 中 然後再讓 linker 把它們連結起來即可 至於 inline function 如果長到需要放在另一個檔案中 那就要好好考慮它到底該不該 inline 事實上這種情況 compiler 應該都會把它視為一般的 function 而不去 inline -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.168.87.163