作者littleshan (我要加入剑道社!)
看板C_and_CPP
标题Re: [问题] 同class可以写在不同的header跟source吗
时间Wed Oct 28 01:44:55 2009
: ※ 引述《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
1F:推 hilorrk:分成不同class 用继承? 10/27 20:17
请千万不要这麽做
继承不是拿来这样恶搞的
2F:→ maboroshiga:嗯有想过class CDb继承5个table的class 10/27 20:33
3F:→ maboroshiga:只是不知道这样会不会影响效能 10/27 20:33
4F:推 layan:应该不会, 除非你有 virtual function, 不然不会 10/27 22:13
多重继承会影响效能
因为在呼叫 member function 时
this pointer 必须视情况加上一个 offset
不过这不是什麽大问题
最大的问题是 这种情况违反了界面继承的原则
CDb 并不是 (is-a) 一种 table
而是含有 (has-a) 一些 table
5F:→ VictorTom:其实我觉得, .cpp可以分开实作, 但.h的宣告仍然通通包在 10/27 22:14
6F:→ VictorTom:一起就可以了吧?_? 10/27 22:14
对 这是正道
7F:推 layan:话说 你可以在 class XXX { } <= 里面 include "xxx.inl" 10/27 22:29
8F:→ layan:也就是说你可以把五个表的函式写在 5 个 xxx.inl files 里 10/27 22:29
9F:→ layan:然後在你的 class CDb { } <= 里面写 #include 它们就行了 10/27 22:30
10F:→ layan:不过这样很鸟 XDXD 看的人也痛苦 10/27 22:30
11F:→ 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