2008-04-16 16:04:20
類間的交叉引用的情況, 需要前向引用宣告.
前向引用宣告不能宣告該類的物件, 也不能在內聯成員函式中使用該類的物件, 只能宣告該類的指標, 引用, 函式形參和返回型別.
// right.h /
// no #include "left.h"
class cleft;// 前向宣告cleft
class cright
// error
cleft r_f3(); // ok
cleft *m_pleft; // ok
cleft m_left; // error
}// right.cpp ///
#include "right.h"
#include "left.h"
void cright::r_f(cleft *pl1, cleft &l2, cleft l3)
cleft cright::r_f3()
// left.h //
#include "right.h"
class cleft
cright m_right;
}注意命名空間中類的前向宣告
// right.h /
// no #include "left.h"
namesapce l_space
;// 前向引用宣告
namesapce r_space
// error
cleft r_f3(); // ok
cleft *m_pleft; // ok
cleft m_left; // error
};};
// right.cpp ///
#include "right.h"
#include "left.h"
using namesapce l_space; // using命名空間
void r_space::cright::r_f(cleft *pl1, cleft &l2, cleft l3)
cleft r_space::cright::r_f3()
// left.h //
#include "right.h"
namespace l_left
r_space::cright m_right;
};};
但是: 類應該是高內聚, 低耦合的, 所以應該盡量避免這樣的設計.
另, 關於命名空間和作用域還有些需要弄清楚, to be continue....
- by kevin.darkelf 20080416
原**:
前向引用宣告
2008 04 16 16 04 20 類間的交叉引用的情況,需要前向引用宣告.前向引用宣告不能宣告該類的物件,也不能在內聯成員函式中使用該類的物件,只能宣告該類的指標,引用,函式形參和返回型別.right.h no include left.h class cleft 前向宣告cleft clas...
C 前向引用宣告
c 當中當有兩個類需要相互引用的時候,不管哪乙個類宣告在前,都會導致類未定義的編譯錯誤。這時候就需要用到類的前向引用宣告,下面的例子中,類a中需要使用類b,但是類b的完整宣告是在a之後,這時在類a的完整宣告之前加一句class b 告訴編譯器b是乙個類名,之後在類a中就可以使用類b作為函式引數了。c...
類前向宣告
class a a void del a ptr int main 正常執行,delete p 先執行類析構函式,通知系統這塊記憶體上的資料已經無效無需維護了,然後使用operator delete 釋放這塊記憶體 class a void del a ptr class a a int main ...