4
我想知道是否必須在使用該類作爲朋友的類中包含「Class1.h」。例如,授予對Class1類的權限的類的.h文件。在朋友的課堂中包含頭文件
class Class2 {
friend class Class1;
}
你需要#include「Class1.h」還是沒有必要?同樣在Class2類中,從不創建或使用Class1對象。 Class1從來沒有反過來操縱Class2。
我想知道是否必須在使用該類作爲朋友的類中包含「Class1.h」。例如,授予對Class1類的權限的類的.h文件。在朋友的課堂中包含頭文件
class Class2 {
friend class Class1;
}
你需要#include「Class1.h」還是沒有必要?同樣在Class2類中,從不創建或使用Class1對象。 Class1從來沒有反過來操縱Class2。
的語法是:
friend class Class1;
不,你不包括頭。更一般地說,除非實際上以某種方式使用類定義(例如,使用類的實例並且編譯器需要知道其中的內容),否則不需要包含頭。如果您只是按名稱引用課程,例如你只需要一個指向類的實例的指針,然後編譯器不需要看類定義 - 只要聲明它就可以告訴它類:
class Class1;
這很重要,原因有兩個:小的一點是它允許你定義相互引用的類型(但你不應該!);最主要的是它允許你減少代碼庫中的物理耦合,這可以幫助減少編譯時間。
要回答Gary的評論,可觀察到該編譯和鏈接罰款:
class X;
class Y
{
X *x;
};
int main()
{
Y y;
return 0;
}
無需提供X的定義除非你實際使用的東西,從十
我的壞。我沒有寫在實際的代碼中,雖然 – JDN 2012-04-11 20:27:08
在發佈到SO之前總是編譯你的代碼:) – 2012-04-11 20:27:55
只要類最終包含在同一個二進制文件中(否則在鏈接過程中會出錯) – 2012-04-11 20:33:08