一、hpp 干啥的?

hpp,其实质就是将 .cpp 的实现代码混入 .h 头文件当中,即声明、定义和实现都包含在同一文件,
则该类的调用者只需要 include 该 hpp 文件即可,无需再将 cpp 加入到 project 中进行编译。

二、hpp使用场景:类模板

1、遇到问题:

类模板中成员函数的创建时机是在调用阶段,
导致分文件编写时(仅区分 *.h 和 *.cpp )链接不到,报错。

2、解决方式(主流):

将声明和实现写到同一个文件中,
并更改后缀名为 .hpp(hpp是约定的名称,并不是强制 )。

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 时,
将在链接时导致符号重定义错误。
要避免这种情况,
需要去除全局对象,将全局函数封装为类的静态方法。

C++ hpp 文件相关推荐

  1. .h 与.hpp文件的区别

    hpp,其实质就是将.cpp的实现代码混入.h头文件当中,定义与实现都包含在同一文件,则该类的调用者只需要include该hpp文件即可,无需再将cpp加入到project中进行编译.而实现代码将直接 ...

  2. 什么是.hpp文件?

    hpp(Header Plus Plus)头文件,顾名思义就是 .h 文件加上 .cpp 文件,在 boost 开源库中频繁出现,其实就是 .cpp 实现代码混入 .h 文件当中,定义和实现都包含在同 ...

  3. .h 与 .hpp 文件

    hpp,顾名思义等于.h加上.cpp,在boost.Xerces等开源库中频繁出现,偶在机缘巧合之下,学得一招半式,遂记录如下,以供参考学习.     hpp,其实质就是将.cpp的实现代码混入.h头 ...

  4. 5003.c++定义hpp文件

    c++定义hpp文件 c++ 定义hpp文件,注意事项方法定义实现必须放在类中,否则会出现重复定义情况. /********************************************** ...

  5. .hpp文件和.h文件的区别

    hpp,顾名思义等于.h加上.cpp,在boost. Xerces等开源库中频繁出现,偶在机缘巧合之下,学得一招半式,遂记录如下,以供参考学习.     hpp,其实质就是将.cpp的实现代码混入.h ...

  6. HLS第三十八课(xfopencv,H文件和HPP文件的使用)

    常用的几个xfopencv的H文件和HPP文件的分析与使用. 常用的可综合的通用H文件. xf_common.h. common/xf_infra.h common/xf_structs.h comm ...

  7. hpp文件和h文件有什么区别

    hpp文件和h文件都是C++中的头文件,它们的作用是用来声明函数.类和变量的.但是它们有一个主要的区别,就是hpp文件中可以包含C++代码,而h文件中不能包含C++代码.通常来说,我们可以将hpp文件 ...

  8. C++ hpp文件的编写

    hpp,顾名思义等于.h加上.cpp,在boost. Xerces等开源库中频繁出现,偶在机缘巧合之下,学得一招半式,遂记录如下,以供参考学习.     hpp,其实质就是将.cpp的实现代码混入.h ...

  9. c++中什么时候使用.hpp文件

    分文件编写类模板 类模板的声明和定义要写在一个.hpp文件中,声明和定义不可以分开,因为分文件的话,main.cpp中只引入.h,在类模板进行二次编译的时候,无法找到类的定义,会出错.所以要将其声明和 ...

最新文章

  1. 学历案与深度学习电子书
  2. 区块链开发:为什么你应该学习?
  3. smarty---设置
  4. [APB VNext 笔记] UI
  5. 学渣该不该学java_为什么很多学霸不愿给学渣讲题?不是因为高冷,而是学渣太难带...
  6. nginx+tomcat的负载均衡
  7. 11.1自定义异常类
  8. MySql 自适应哈希索引
  9. 《机器学习实战》代码实现学习一 使用K-近邻算法改进约会网站的配对效果(数据准备)...
  10. 【数据结构排序】之三选择排序
  11. Linux下部署Java,Tomcat环境
  12. 非标机械设计该怎么做,老机械工程师告诉你
  13. 软路由初次尝试者的折腾指南
  14. python自动分箱,计算woe,iv
  15. 安徽大学计算机科学与技术考研科目,2020安徽大学计算机专业课调整
  16. 计算机组成原理计算题整理
  17. STM32__04—PMW呼吸灯
  18. 使用jsp+servlet来实现增加和删除功能
  19. 如何在路演中获得投资机会|兆骑科创
  20. Aspose.Slides使用教程:使用 C++ 在 PowerPoint 演示文稿中添加幻灯片切换

热门文章

  1. i5 1155G7 怎么样相当于什么水平
  2. 跟着iMeta学做图|circlize绘制和弦图展示样本物种相对丰度
  3. 毕设-基于Javaweb药品销售管理系统
  4. 再见收费的Navicat,操作所有数据库就靠它了
  5. 四足机器人运动运动控制系统及相关算法、导航系统及相关算法本人硕毕论文发表后再更
  6. java enumeration 创建_Java Enumeration接口 - Java 教程 - 自强学堂
  7. 云之梦php免费教学视频下载_云知梦PHP基础入门视频教程 PHP全套基础教程 共52课...
  8. C# 以管理员权限删除文件
  9. 使用kNN算法对魔方颜色进行分类
  10. 软件企业测试团队的组织架构