Re: [問題] 同class可以寫在不同的header跟source嗎

看板C_and_CPP (C/C++)作者 (我要加入劍道社!)時間16年前 (2009/10/28 01:44), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
: ※ 引述《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

10/27 20:17,
分成不同class 用繼承?
10/27 20:17
請千萬不要這麼做 繼承不是拿來這樣惡搞的

10/27 20:33,
嗯有想過class CDb繼承5個table的class
10/27 20:33

10/27 20:33,
只是不知道這樣會不會影響效能
10/27 20:33

10/27 22:13,
應該不會, 除非你有 virtual function, 不然不會
10/27 22:13
多重繼承會影響效能 因為在呼叫 member function 時 this pointer 必須視情況加上一個 offset 不過這不是什麼大問題 最大的問題是 這種情況違反了界面繼承的原則 CDb 並不是 (is-a) 一種 table 而是含有 (has-a) 一些 table

10/27 22:14,
其實我覺得, .cpp可以分開實作, 但.h的宣告仍然通通包在
10/27 22:14

10/27 22:14,
一起就可以了吧?_?
10/27 22:14
對 這是正道

10/27 22:29,
話說 你可以在 class XXX { } <= 裡面 include "xxx.inl"
10/27 22:29

10/27 22:29,
也就是說你可以把五個表的函式寫在 5 個 xxx.inl files 裡
10/27 22:29

10/27 22:30,
然後在你的 class CDb { } <= 裡面寫 #include 它們就行了
10/27 22:30

10/27 22:30,
不過這樣很鳥 XDXD 看的人也痛苦
10/27 22:30

10/27 22:31,
不見得要.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
文章代碼(AID): #1Avp6QNI (C_and_CPP)
文章代碼(AID): #1Avp6QNI (C_and_CPP)