日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

两个类相互包含引用的问题--类前向声明

發(fā)布時(shí)間:2023/11/27 生活经验 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 两个类相互包含引用的问题--类前向声明 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在構(gòu)造自己的類時(shí),有可能會(huì)碰到兩個(gè)類之間的相互引用問(wèn)題,例如:定義了類A類B,A中使用了B定義的類型,B中也使用了A定義的類型
class A
{
??? int i;
??? B b;
}

class B
{
??? int i;
??? A* a;
}

請(qǐng)注意上面的定義內(nèi)容,一般情況下是不能出現(xiàn)類A,類B相互引用都定義對(duì)象,即如下的樣子:
class A
{
int i;
B b;
}

class B
{
int i;
A?? a;
}
在這種情況下,想想能夠有a.b.a.b.a.b.a.b.a.b…………,很有點(diǎn)子子孫孫無(wú)窮盡之狀,那么我的機(jī)器也無(wú)法承受。最主要的還是這種關(guān)系很難存在,也很難管理。這種定義方式類同程式中的死循環(huán)。所以,一般來(lái)說(shuō),兩者的定義,至少有一方是使用指針,或兩者都使用指針,但是決不能兩者都定義實(shí)體對(duì)象。

言歸正傳,那么,在定義時(shí)因?yàn)橄嗷ヒ每隙〞?huì)需要相互包含頭文檔,假如僅僅只是在各自的頭文檔中包含對(duì)方的頭文檔,是通但是編譯的,如下:
//class A.h
#include "B.h"
class A
{
int i;
B?? b;
}

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

如上的包含方式可能會(huì)造成編譯器有錯(cuò)誤提示:A.h文檔中使用了示知類型B。
怎么辦?
一般的做法是:兩個(gè)類的頭文檔之中,選一個(gè)包含另一個(gè)類的頭文檔,但另一個(gè)頭文檔中只能采用class *;的申明形式,而在實(shí)現(xiàn)文檔中(*.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中的文檔包含處要有下面語(yǔ)句,否則不能調(diào)用成員a的任何內(nèi)容
#include "A.h"
B::B()
{
……
}

兩個(gè)類互相用包含

2009-06-14 00:15

當(dāng)兩個(gè)類互相包含 互相在本類中定義另外一個(gè)類的對(duì)象指針引用時(shí)候

因?yàn)楸仨毐WC當(dāng)一個(gè)類先聲明或者定義時(shí)候才可以在另外一個(gè)類中使用

所以對(duì)于類A B 需要在類A中定義一個(gè)B類的對(duì)象 指針或引用 在B類中定義一個(gè)A類的對(duì)象 這樣互相包含

時(shí)候 就需要先在類中什么一下要用的類

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

然后在頭文件或者CPP文件中加入B.H

或則A.h 這樣就可以互相定義而不產(chǎn)生錯(cuò)誤了

但是要注意的是上述的方法是只適用于用來(lái)定義類指針或者類應(yīng)用

而不能來(lái)定義類對(duì)象變量或者函數(shù)的變量名 這是因?yàn)樯厦鎯H僅聲明了類 說(shuō)明這個(gè)類是一個(gè)標(biāo)識(shí) 還沒(méi)有實(shí)現(xiàn)所以不能定義對(duì)象變量

但是對(duì)于如果想要在一個(gè)類中定義對(duì)象來(lái)說(shuō)比如 在A,H文件中定義B類對(duì)象這樣的話 就需要 在A.H中包含B類頭文件 #include “B.H” 我覺(jué)得吧 只有包含了一個(gè)類的頭文件 這樣相當(dāng)于把這個(gè)類定義插入到里面了 所以可以直接定義對(duì)象 定義對(duì)象需要實(shí)在的內(nèi)容 而不僅僅是知識(shí)聲明一下類 說(shuō)明這個(gè)類是個(gè)標(biāo)識(shí) 必須定義好實(shí)體內(nèi)容 這樣才可以 定義變量

而這種情況下 不能兩個(gè)類互相包含了 我一般所見(jiàn)的內(nèi)容就是定義了B類對(duì)象變量后 則只能在B.H中定義 A類指針或者引用了 所以就在B.H里面聲明 CLASS A; 聲明了 就是如此了

確實(shí)一般都是如此 兩個(gè)類一個(gè)包含頭文件 另外一個(gè)聲明類 另外在實(shí)現(xiàn)文件中當(dāng)然還得包含這個(gè)頭文件了 不要忘了這個(gè) 而以為不用包含頭文件 僅僅聲明了類就OK

所以一旦是個(gè)類名字聲明 則只能是定義對(duì)象指針或引用(無(wú)論是單個(gè)定義還是對(duì)于函數(shù)參數(shù) 定義都如此) 包含就都可以了

我覺(jué)得不能每個(gè)里面都定義對(duì)象變量 最多一個(gè) 否則會(huì)產(chǎn)生 死循環(huán)

只是不知道要是需要定義兩個(gè)對(duì)象變量 或者三個(gè)類或以上的這樣時(shí)候會(huì)怎么樣啊

倒是確實(shí)是當(dāng)UpdateData(FALSE)是把數(shù)據(jù)從變量傳遞到控件中 而TRUE是把控件中內(nèi)容傳遞到變量中

兩個(gè)不同的類相互引用的情況下頭文件包含問(wèn)題


總結(jié)

以上是生活随笔為你收集整理的两个类相互包含引用的问题--类前向声明的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。