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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

类前置声明的使用

發(fā)布時間:2023/12/20 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 类前置声明的使用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

今天在寫代碼時,遇到了是否需要加頭文件的問題,看到這個博客之后收益匪淺,因此轉(zhuǎn)載該篇文章。

轉(zhuǎn)載:https://www.jianshu.com/p/9768175387b6

首先我們看這樣一個示例程序:

以上代碼中,類CY中有個CX類型的數(shù)據(jù)成員,我們需要在CY.h中包含CX.h才能編譯通過。所以,我們說這里的CY類依賴CX類,當(dāng)CX.h修改導(dǎo)致CX對象的大小發(fā)生變化時(比如,新增一個數(shù)據(jù)成員或新增一個方法時), CY.cpp都需要重新編譯。這在大型工程中可能會造成巨大的編譯成本.

有沒有辦法解決這個問題? 有!使用類前置聲明。

我們先看看修改之后的代碼。

這里首先將CX.h的包含語句修改為CX的類前置聲明,然后數(shù)據(jù)成員由CX對象修改為指向CX對象的指針。但是奇怪的是,如果不將CX對象修改為指向CX對象的指針,還是會編譯出錯。

error C2079: “CY::m_x2”使用未定義的 class“CX”

只能在指針或引用類型上使用類前置聲明

當(dāng)CY.h中的數(shù)據(jù)成員是CX對象時,CY.h需要知道CX對象的大小,當(dāng)CX.h發(fā)生修改,例如向CX類添加數(shù)據(jù)成員或者方法成員,CX對象大小發(fā)生改變,所以CY.cpp必須重新編譯。

當(dāng)CY.h中的數(shù)據(jù)成員是指向CX對象的指針時,CY.h并不需要知道CX對象的大小,因為指向CX對象的指針在給定平臺上的大小是固定的。所以,只需要一種“非完整性聲明”,也即這里的類前置聲明。

引用的本質(zhì)還是指針,所以類前置聲明也適合引用的情況。

可以使用類前置聲明的幾種情況

1. CY有一個類型為指向CX的指針的成員變量。

2. CY有一個類型為容器成員,且容器類的元素是指向CX的指針。但是如果元素是CX對象的話,則會編譯出錯,原因是CY需要知道CX對象的大小。

3. CY中有一個函數(shù),它的返回值是CX對象/指向CX的指針/指向CX的引用,或者它的參數(shù)是CX對象/指向CX的指針/指向CX的引用。

總結(jié)

合理的使用類前置聲明,不僅可以減少工程編譯的時間,更重要的是,可以讓你從更深的視角洞察工程的物理依賴關(guān)系,從而為代碼重構(gòu)提供依據(jù)。在寫代碼的時候,不妨經(jīng)常問一下自己:我是否真的有必要在這個頭文件里包含另一個頭文件?
?

總結(jié)

以上是生活随笔為你收集整理的类前置声明的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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