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

2021-10-09 18:18:20 字數 1829 閱讀 1000

在構造自己的類時,有可能會碰到兩個類之間的相互引用問題,例如:定義了類a類b,a中使用了b定義的型別,b中也使用了a定義的型別

class a

class b

請注意上面的定義內容,一般情況下是不能出現類a,類b相互引用都定義物件,即如下的樣子:

class a

class b

在這種情況下,想想能夠有a.b.a.b.a.b.a.b.a.b…………,很有點子子孫孫無窮盡之狀,那麼我的機器也無法承受。最主要的還是這種關係很難存在,也很難管理。這種定義方式類同程式中的死迴圈。所以,一般來說,兩者的定義,至少有一方是使用指標,或兩者都使用指標,但是決不能兩者都定義實體物件。

言歸正傳,那麼,在定義時因為相互引用肯定會需要相互包含頭文件,假如僅僅只是在各自的頭文件中包含對方的頭文件,是通但是編譯的,如下:

//class a.h

#include "b.h"

class a

//class b.h

#include "a.h"

class b

怎麼辦?

一般的做法是:兩個類的頭文件之中,選乙個包含另乙個類的頭文件,但另乙個頭文件中只能採用class *;的申明形式,而在實現文件中(*.cpp)中包含頭文件,如下:

//class a.h

#include "b.h"

class a

//class b.h

class a;

class b

//在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,**件中定義b類物件這樣的話 就需要 在a.h中包含b類標頭檔案 #include 「b.h」 我覺得吧 只有包含了乙個類的標頭檔案 這樣相當於把這個類定義插入到裡面了 所以可以直接定義物件 定義物件需要實在的內容 而不僅僅是知識宣告一下類 說明這個類是個標識 必須定義好實體內容 這樣才可以 定義變數

而這種情況下 不能兩個類互相包含了 我一般所見的內容就是定義了b類物件變數後 則只能在b.h中定義 a類指標或者引用了 所以就在b.h裡面宣告 class a; 宣告了 就是如此了

確實一般都是如此 兩個類乙個包含標頭檔案 另外乙個宣告類 另外在實現檔案中當然還得包含這個標頭檔案了 不要忘了這個 而以為不用包含標頭檔案 僅僅宣告了類就ok

所以一旦是個類名字宣告 則只能是定義物件指標或引用(無論是單個定義還是對於函式引數 定義都如此) 包含就都可以了

我覺得不能每個裡面都定義物件變數 最多乙個 否則會產生 死迴圈

只是不知道要是需要定義兩個物件變數 或者三個類或以上的這樣時候會怎麼樣啊

倒是確實是當updatedata(false)是把資料從變數傳遞到控制項中 而true是把控制項中內容傳遞到變數中

兩個不同的類相互引用的情況下標頭檔案包含問題

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

在構造自己的類時,有可能會碰到兩個類之間的相互引用問題,例如 定義了類a類b,a中使用了b定義的型別,b中也使用了a定義的型別 class a int i b b class b int i a a 請注意上面的定義內容,一般情況下是不能出現類a,類b相互引用都定義物件,即如下的樣子 class a...

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

在構造自己的類時,有可能會碰到兩個類之間的相互引用問題,例如 定義了類a類b,a中使用了b定義的型別,b中也使用了a定義的型別 class a class b 請注意上面的定義內容,一般情況下是不能出現類a,類b相互引用都定義物件,即如下的樣子 class a class b 在這種情況下,想想可以...

c 兩個類相互包含引用的問題

在構造自己的類時,有可能會碰到兩個類之間的相互引用問題,例如 定義了類a類b,a中使用了b定義的型別,b中也使用了a定義的型別 class a class b 請注意上面的定義內容,一般情況下是不能出現類a,類b相互引用都定義物件,即如下的樣子 class a class b 在這種情況下,想想可以...