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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

.h 与 .hpp 文件

發布時間:2025/3/15 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .h 与 .hpp 文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

hpp,顧名思義等于.h加上.cpp,在boost、Xerces等開源庫中頻繁出現,偶在機緣巧合之下,學得一招半式,遂記錄如下,以供參考學習。

??? hpp,其實質就是將.cpp的實現代碼混入.h頭文件當中,定義與實現都包含在同一文件,則該類的調用者只需要include該hpp文件即可,無需再 將cpp加入到project中進行編譯。而實現代碼將直接編譯到調用者的obj文件中,不再生成單獨的obj,采用hpp將大幅度減少調用 project中的cpp文件數與編譯次數,也不用再發布煩人的lib與dll,因此非常適合用來編寫公用的開源庫。 ??? hpp的優點不少,但是編寫中有以下幾點要注意: ??? ????1、不可包含全局對象和全局函數。 ??? 由于hpp本質上是作為.h被調用者include,所以當hpp文件中存在全局對象或者全局函數,而該hpp被多個調用者include時,將在鏈接時導致符號重定義錯誤。要避免這種情況,需要去除全局對象,將全局函數封裝為類的靜態方法。 ????2、類之間不可循環調用。 ??? 在.h和.cpp的場景中,當兩個類或者多個類之間有循環調用關系時,只要預先在頭文件做被調用類的聲明即可,如下: ????class?B; ????class?A{ ????public: ???????? void someMethod(B b); ??? }; ????class?B{ ????public: ???????? void someMethod(A a); ??? }; ??? 在hpp場景中,由于定義與實現都已經存在于一個文件,調用者必需明確知道被調用者的所有定義,而不能等到cpp中去編譯。因此hpp中必須整理類之間調 用關系,不可產生循環調用。同理,對于當兩個類A和B分別定義在各自的hpp文件中,形如以下的循環調用也將導致編譯錯誤: ????//a.hpp ????#include "b.hpp" ????class?A{ ????public: ??????? void someMethod(B b); ??? }; ????//b.hpp ????#include "a.hpp" ????class?B{ ????public: ??????? void someMethod(A a); ??? }; ????3、不可使用靜態成員。 ??? 靜態成員的使用限制在于如果類含有靜態成員,則在hpp中必需加入靜態成員初始化代碼,當該hpp被多個文檔include時,將產生符號重定義錯誤。唯一的例外是const static整型成員,因為在vs2003中,該類型允許在定義時初始化,如: ??? class A{ ???? public: ?????? const static int intValue = 123; ???? }; ??? 由于靜態成員的使用是很常見的場景,無法強制清除,因此可以考慮以下幾種方式(以下示例均為同一類中方法) ??? 1.類中僅有一個靜態成員時,且僅有一個調用者時,可以通過局域靜態變量模擬 ????//方法模擬獲取靜態成員 ????someType?getMember() ??? { ?????? static?someType?value(xxx);//作用域內靜態變量 ???????return?value; ??? } ??? 2.類中有多個方法需要調用靜態成員,而且可能存在多個靜態成員時,可以將每個靜態成員封裝一個模擬方法,供其他方法調用。 ????someType?getMemberA() ??? { ?????? static?someType?value(xxx);//作用域內靜態變量 ???????return?value; ??? } ????someType?getMemberB() ??? { ?????? static?someType?value(xxx);//作用域內靜態變量 ???????return?value; ??? } ???void?accessMemberA() ??? { ???????someType?member = getMemberA();//獲取靜態成員 ???? }; ??? //獲取兩個靜態成員 ????void?accessStaticMember() ??? { ???????someType a?= getMemberA();//獲取靜態成員 ???????someType b?= getMemberB(); ???? }; ??? 3.第二種方法對于大部分情況是通用的,但是當所需的靜態成員過多時,編寫封裝方法的工作量將非常巨大,在此種情況下,建議使用Singleton模式,將被調用類定義成普通類,然后使用Singleton將其變為全局唯一的對象進行調用。 ???? 如原h+cpp下的定義如下: ????class?A{ ????public: ????????type?getMember(){ ?????????? return member; ??????? } ????????static type?member;//靜態成員 ??? } ??? 采用singleton方式,實現代碼可能如下(singleton實現請自行查閱相關文檔) ??? //實際實現類 ????class?Aprovider{ ????public: ????????type?getMember(){ ?????????? return member; ??????? } ?????? type?member;//變為普通成員 ??? } ??? //提供給調用者的接口類 ????class?A{ ????public: ????????type?getMember(){ ?????????? return Singleton<AProvider>::getInstance()->getMember(); ??????? } ??? } 新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!

總結

以上是生活随笔為你收集整理的.h 与 .hpp 文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 啪视频网站 | 成人激情视频在线 | av自拍| 国产二级视频 | 五月香蕉网| 男女免费视频 | 在线观看国产一级片 | 91麻豆蜜桃| 日韩欧美亚洲天堂 | 欧美亚洲高清 | 国产一区二区三区四区三区四 | 欧美日韩高清不卡 | 日本亚洲网站 | 国产激情视频在线播放 | a天堂中文 | 久久久无码人妻精品一区 | 在线观看麻豆av | 国产午夜精品一区二区三区四区 | 一级少妇精品久久久久久久 | 欧美成人综合一区 | 欧美黄色一级生活片 | 欧美人与zoxxxx另类 | 亚洲国产一区在线观看 | 欧美毛片在线观看 | 免费黄色在线观看 | 一区二区三区天堂 | 亚洲福利视频一区二区 | 91麻豆产精品久久久久久 | 丰满少妇乱子伦精品看片 | 草逼国产 | 在线观看亚洲国产 | 我和岳m愉情xxxⅹ视频 | 在线永久看片免费的视频 | 欧美乱码精品一区二区三区 | 高hnp视频| 亚洲黄色网络 | 横恋母在线观看 | 欧美影院在线观看 | 啪在线视频 | 制服丝袜第一页在线观看 | 国产女主播喷水高潮网红在线 | 亚洲精品无码一区二区 | 2021久久| 国产精品久久久久毛片 | 国产精品一区二区三区久久久 | 黑人糟蹋人妻hd中文字幕 | 激情视频网站在线观看 | 欧美高清 | 亚洲精品乱码久久久久久不卡 | 无人在线观看高清视频 单曲 | 91精品在线免费 | 久久综合伊人77777麻豆最新章节 | 亚洲色图制服诱惑 | h毛片| 高潮毛片 | 亚洲色图 在线视频 | 九色丨蝌蚪丨成人 | 日韩欧美精品在线播放 | 亚洲精品大片www | 日韩欧美一级大片 | 日本一区视频在线播放 | 亚洲综合二区 | 中文字幕一区二区三区四区五区 | 韩日一区二区三区 | 国产一级不卡毛片 | 先锋资源一区 | 欧美区日韩区 | 国产91清纯白嫩初高中在线观看 | 日本另类视频 | 日本欧美色图 | 你懂的国产在线 | 日韩精品1 | 免费人成视频在线播放 | 国产嫩草在线 | 在线观看麻豆视频 | 国产高清av | 日韩sese | 爱上av| 日韩伦理一区 | 丝袜美腿一区二区三区 | 147人体做爰大胆图片成人 | 美女日批视频在线观看 | 久久久欧美精品sm网站 | 国产资源视频 | 亚洲理论片在线观看 | 免费观看亚洲视频 | 国产91丝袜在线播放九色 | 91九色偷拍| 国产片黄色 | 青青在线| 北条麻妃久久精品 | 国产精品日韩电影 | 小sao货水好多真紧h无码视频 | 欧美激情999| aaa黄色一级片 | 中文字幕有码视频 | 亚洲av区无码字幕中文色 | 亚洲AV无码精品色 | 午夜九九九 |