C++中的hpp文件及使用hpp文件的好處
1 什么是hpp文件?
hpp文件是C++程序中一種特殊頭文件,它可以包含類的聲明和實現(xiàn)。與傳統(tǒng)的h文件相比,hpp文件具有以下特點:
- 將類的聲明和實現(xiàn)放在同一個文件里,減少了代碼量,提高了代碼的可讀性。
- 無需再將cpp加入到項目中進行編譯,將代碼直接編譯到調(diào)用者的obj文件,不再生成單獨的obj,大幅度減少編譯次數(shù)。
- 非常適合編寫開源庫,boost庫大量使用模板,采樣hpp的形式可以保持與各個編譯器更好的兼容性。
2 使用hpp文件的好處
- 減少代碼量,提高代碼可讀性
- 避免符號重定義錯誤
- 提高編譯效率
- 方便編寫開源庫
- 提高代碼的可維護性
3 注意事項
與傳統(tǒng)的h文件相比,hpp文件有很多優(yōu)點,但是在編寫hpp文件時也需要注意以下事項:
① 不可包含全局對象和全局函數(shù)
由于hpp文件本質(zhì)上是作為h文件被調(diào)用者include,所以當hpp文件中存在全局對象或者全局函數(shù),而該hpp被多個調(diào)用者include時,將在鏈接時導致符號重定義錯誤。要避免這種情況,需要去除全局對象,將全局函數(shù)封裝為類的靜態(tài)方法。
// 錯誤示例 #include <iostream> int g_val = 0; // 全局對象 void print_val() { std::cout << g_val << std::endl; } // 正確示例 #include <iostream> class MyClass { public: void print_val() { std::cout << m_val << std::endl; } private: int m_val = 0; // 類成員 };
② 類之間不可循環(huán)調(diào)用
如果hpp文件中包含多個類,并且這些類之間存在相互依賴關(guān)系,那么在編譯時會導致循環(huán)依賴錯誤。為了避免這種情況,需要對類之間的依賴關(guān)系進行合理的設(shè)計,避免循環(huán)調(diào)用。
// 錯誤示例 #include <iostream> class A { public: void foo(B& b) { // ... } }; class B { public: void bar(A& a) { // ... } }; // 正確示例 #include <iostream> class A { public: void foo(B* b) { // ... } }; class B { public: void bar(A* a) { // ... } };
③ 不可使用靜態(tài)成員
hpp文件中的靜態(tài)成員在編譯時會被編譯到調(diào)用者的obj文件中,這會導致多個調(diào)用者共享同一個靜態(tài)成員。如果靜態(tài)成員發(fā)生變化,則會導致所有調(diào)用者都受到影響。因此,在hpp文件中應避免使用靜態(tài)成員。
// 錯誤示例 #include <iostream> class MyClass { public: static int s_val = 0; // 靜態(tài)成員 void print_val() { std::cout << s_val << std::endl; } }; // 正確示例 #include <iostream> class MyClass { public: void print_val() { int val = 0; // 局部變量 std::cout << val << std::endl; } };
④ 其他注意事項
- 在hpp文件中可以使用#include預處理指令來包含其他頭文件。
- 在hpp文件中可以使用#pragma once預處理指令來避免重復包含。
- 在hpp文件中可以使用using聲明來簡化代碼。
// 示例 #include <iostream> #include <vector> #pragma once using namespace std; class MyClass { public: void print_val() { cout << m_val << endl; } private: int m_val = 0; };
到此這篇關(guān)于C++中的hpp文件 的文章就介紹到這了,更多相關(guān)C++ hpp文件 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用?c++?在?windows?上定時執(zhí)行一個函數(shù)的示例代碼
這篇文章主要介紹了使用c++在windows上穩(wěn)定定時執(zhí)行一個函數(shù),本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-07-07在C++中實現(xiàn)aligned_malloc的方法
這篇文章主要介紹了在C++中實現(xiàn)aligned_malloc的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03c語言程序設(shè)計文件操作方法示例(CreateFile和fopen)
c主要的文件操作函數(shù)有:CreateFile,CloseHandle,ReadFile,WriteFile,SetFilePointer,GetFileSize。其中的讀寫操作是以字符為單位,獲得文件大小也是以字符為單位。2013-12-12