作者avhacker (我想把整片天空打開)
看板Programming
標題Re: [問題] C++的.h檔,請問都怎麼寫?
時間Thu Dec 21 23:49:37 2006
Style II 其實是多此一舉,結果是一樣的.
正確的概念應該是你必需要 include 你所需需要的檔,而且不能多 include,
要自給自足。
像你的 oooo8.h 裡的 class D 並沒有真正用到 B, 而是用到 B&, 所以只要
一個前置宣告就行了;真正用到 B 實體應該是在 oooo8.cpp
所謂 include 而且只 include 所需的檔,意思是:
// A.h
class A{};
// B.h
class B{ void fun(); };
// C.h
#include B.h
class A; // 前置宣告
class C{
A* pA; // 不需 include A.h, 只需一個前置宣告
B b; // 需要 B 的實體,所以要 #include B.h
void fun();
};
// C.cpp
#include B.h
#include A.h
void C::fun(){
pA = new A; // 真正用到 A, 所以要 #include A.h
b.fun(); // 用到 B, 所以要 #include B.h
}
// main.cpp
#include B.h
#include C.h
int main()
{
B b; // 用到 B, #include B.h
C c; // 用到 C, #include C.h,
return 0;
}
此例中即使 C.h 已經 #include B.h,但我們仍要再將 B.h 引入,不能
依靠 C.h 已經引入 B.h 這件事,否則哪天 C.h 有所修改,不再需要引
入 B.h, 而這個修改竟會導至 main.cpp compile 不過,並不合理.
總之,每個編譯單元自給自足,就不會因為過高相依性的問題而導至某
些檔案莫名奇妙的 compile 過,某天又突然不過的問題。當然相依性太
高還會導至其他問題就是了。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.123.19.235
※ 編輯: avhacker 來自: 140.123.19.235 (12/21 23:50)