C++中兩個類相互包含引用問題

在構造本身的類時,有可能會碰到兩個類之間的相互引用問題,例如:定義了類A類B,A中使用了B定義的類型,B中也使用了A定義的類型
class A
{
int i;
B b;
}

class B
{
int i;
A* a;
}

請注意上面的定義內容,通常狀況下是不能出現類A,類B相互引用都定義對象,即以下的樣子:
class A
{
int i;
B b;
}

class B
{
int i;
A a;
}
在這種狀況下,想一想可以有a.b.a.b.a.b.a.b.a.b…………,頗有點子子孫孫無窮盡之狀,那麼個人機器也沒法承受。最主要的仍是這種關係很難存在,也很難管理。這種定義方式類同程式中的死循環。因此,通常來講,二者的定義,至少有一方是使用指針,或二者都使用指針,可是決不能二者都定義實體對象。 

言歸正傳,那麼,在定義時由於相互引用確定會須要相互包含頭文檔,假如僅僅只是在各自的頭文檔中包含對方的頭文檔,是通可是編譯的,以下:
//class A.h
#include "B.h"
class A
{
int i;
B b;
}

//class B.h
#include "A.h"
class B
{
int i;
A *a;
}

如上的包含方式可能會形成編譯器有錯誤提示:A.h文檔中使用了示知類型B。
怎麼辦?
通常的作法是:兩個類的頭文檔之中,選一個包含另外一個類的頭文檔,但另外一個頭文檔中只能採用class *;的申明形式,而在實現文檔中(*.cpp)中包含頭文檔,以下:
//class A.h
#include "B.h"
class A
{
int i;
B b;
}

//class B.h
class A;
class B
{
int i;
A *a;
}

//B.cpp
//在B.cpp中的文檔包含處要有下面語句,不然不能調用成員a的任何內容
#include "A.h"
B::B()
{
……
}

兩個類互相用包含

2009-06-14 00:15

  

當兩個類互相包含 互相在本類中定義另一個類的對象指針引用時候

由於必須保證當一個類先聲明或者定義時候才能夠在另一個類中使用

因此對於類A B 須要在類A中定義一個B類的對象 指針或引用 在B類中定義一個A類的對象 這樣互相包含

時候 就須要先在類中什麼一下要用的類

如在類A的前面聲明Class B 在B類前聲明Class A

而後在頭文件或者CPP文件中加入B.H

或則A.h 這樣就能夠互相定義而不產生錯誤了

可是要注意的是上述的方法是隻適用於用來定義類指針或者類應用 

而不能來定義類對象變量或者函數的變量名 這是由於上面僅僅聲明瞭類 說明這個類是一個標識 尚未實現因此不能定義對象變量

可是對於若是想要在一個類中定義對象來講好比 在A,H文件中定義B類對象這樣的話 就須要 在A.H中包含B類頭文件 #include 「B.H」 我以爲吧 只有包含了一個類的頭文件 這樣至關於把這個類定義插入到裏面了 因此能夠直接定義對象 定義對象須要實在的內容 而不只僅是知識聲明一下類 說明這個類是個標識 必須定義好實體內容 這樣才能夠 定義變量

而這種狀況下 不能兩個類互相包含了 我通常所見的內容就是定義了B類對象變量後 則只能在B.H中定義 A類指針或者引用了 因此就在B.H裏面聲明 CLASS A; 聲明瞭 就是如此了 

確實通常都是如此 兩個類一個包含頭文件 另一個聲明類 另外在實現文件中固然還得包含這個頭文件了 不要忘了這個 而覺得不用包含頭文件 僅僅聲明瞭類就OK

因此一旦是個類名字聲明 則只能是定義對象指針或引用(不管是單個定義仍是對於函數參數 定義都如此) 包含就均可以了 

我以爲不能每一個裏面都定義對象變量 最多一個 不然會產生 死循環 

只是不知道要是須要定義兩個對象變量 或者三個類或以上的這樣時候會怎麼樣啊

卻是確實是當UpdateData(FALSE)是把數據從變量傳遞到控件中 而TRUE是把控件中內容傳遞到變量中

  

兩個不一樣的類相互引用的狀況下頭文件包含問題
 
相關文章
相關標籤/搜索