2025年C++ hpp 文件

C++ hpp 文件一 hpp 干啥的 hpp 其实质就是将 cpp 的实现代码混入 h 头文件当中 即声明 定义和实现都包含在同一文件 则该类的调用者只需要 include 该 hpp 文件即可 无需再将 cpp 加入到 project 中进行编译 二 hpp 使用场景 类模板 1

大家好,我是讯享网,很高兴认识大家。
一、hpp 干啥的?



二、hpp使用场景:类模板

1、遇到问题:

类模板中成员函数的创建时机是在调用阶段,
导致分文件编写时(仅区分 *.h 和 *.cpp )链接不到,报错。
在这里插入图片描述
讯享网


2、解决方式(主流):

person.hpp 代码( 不再需要 person.h ,相当于取代 person.h 了 ):

#pragma once #include <iostream> using namespace std; #include <string> template<class T1, class T2> class Person { 
    public: Person(T1 name, T2 age); void showPerson(); public: T1 m_Name; T2 m_Age; }; //构造函数 类外实现 template<class T1, class T2> Person<T1, T2>::Person(T1 name, T2 age) { 
    this->m_Name = name; this->m_Age = age; } //成员函数 类外实现 template<class T1, class T2> void Person<T1, T2>::showPerson() { 
    cout << "姓名: " << this->m_Name << " 年龄:" << this->m_Age << endl; } 

讯享网

类模板分文件编写 .cpp 中代码:

讯享网#include<iostream> using namespace std; //主流解决方式:将声明和实现写到一起,文件后缀名改为 .hpp #include "person.hpp" int main() { 
    Person<string, int> p("Tom", 10); p.showPerson(); return 0; } 


三、hpp 的优点

这样代码实现会直接编译到调用者的 obj 文件中,而不再生成单独的 obj,
采用 hpp 将大幅度减少调用 project 中的 cpp 文件数与编译次数,
也不用再发布 lib 与 dll,因此非常适合用来编写公用的开源库。



四、hpp 使用注意

1、与 *.h 类似,hpp 是 C++ 程序头文件 ( #include < *.hpp>);

2、VCL专用的头文件,已预编译;

3、是一般模板类的头文件;

4、一般而言,*.h 里面只有声明,没有实现,而 *.hpp 里声明实现都有,后者可以减少.cpp的数量;

5、*.h 里面可以有 using namespace std,而 *.hpp 里面没有。

6、不可包含全局对象和全局函数。
由于 hpp 本质上是作为 .h 被调用者 include,
所以当 hpp 文件中存在全局对象或者全局函数,而该 hpp 被多个调用者 include 时,
将在链接时导致符号重定义错误。
要避免这种情况,
需要去除全局对象,将全局函数封装为类的静态方法。

小讯
上一篇 2025-02-16 11:58
下一篇 2025-02-26 20:26

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/123832.html