C++ hpp 文件
一、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 文件相关推荐
- .h 与.hpp文件的区别
hpp,其实质就是将.cpp的实现代码混入.h头文件当中,定义与实现都包含在同一文件,则该类的调用者只需要include该hpp文件即可,无需再将cpp加入到project中进行编译.而实现代码将直接 ...
- 什么是.hpp文件?
hpp(Header Plus Plus)头文件,顾名思义就是 .h 文件加上 .cpp 文件,在 boost 开源库中频繁出现,其实就是 .cpp 实现代码混入 .h 文件当中,定义和实现都包含在同 ...
- .h 与 .hpp 文件
hpp,顾名思义等于.h加上.cpp,在boost.Xerces等开源库中频繁出现,偶在机缘巧合之下,学得一招半式,遂记录如下,以供参考学习. hpp,其实质就是将.cpp的实现代码混入.h头 ...
- 5003.c++定义hpp文件
c++定义hpp文件 c++ 定义hpp文件,注意事项方法定义实现必须放在类中,否则会出现重复定义情况. /********************************************** ...
- .hpp文件和.h文件的区别
hpp,顾名思义等于.h加上.cpp,在boost. Xerces等开源库中频繁出现,偶在机缘巧合之下,学得一招半式,遂记录如下,以供参考学习. hpp,其实质就是将.cpp的实现代码混入.h ...
- HLS第三十八课(xfopencv,H文件和HPP文件的使用)
常用的几个xfopencv的H文件和HPP文件的分析与使用. 常用的可综合的通用H文件. xf_common.h. common/xf_infra.h common/xf_structs.h comm ...
- hpp文件和h文件有什么区别
hpp文件和h文件都是C++中的头文件,它们的作用是用来声明函数.类和变量的.但是它们有一个主要的区别,就是hpp文件中可以包含C++代码,而h文件中不能包含C++代码.通常来说,我们可以将hpp文件 ...
- C++ hpp文件的编写
hpp,顾名思义等于.h加上.cpp,在boost. Xerces等开源库中频繁出现,偶在机缘巧合之下,学得一招半式,遂记录如下,以供参考学习. hpp,其实质就是将.cpp的实现代码混入.h ...
- c++中什么时候使用.hpp文件
分文件编写类模板 类模板的声明和定义要写在一个.hpp文件中,声明和定义不可以分开,因为分文件的话,main.cpp中只引入.h,在类模板进行二次编译的时候,无法找到类的定义,会出错.所以要将其声明和 ...
最新文章
- 学历案与深度学习电子书
- 区块链开发:为什么你应该学习?
- smarty---设置
- [APB VNext 笔记] UI
- 学渣该不该学java_为什么很多学霸不愿给学渣讲题?不是因为高冷,而是学渣太难带...
- nginx+tomcat的负载均衡
- 11.1自定义异常类
- MySql 自适应哈希索引
- 《机器学习实战》代码实现学习一 使用K-近邻算法改进约会网站的配对效果(数据准备)...
- 【数据结构排序】之三选择排序
- Linux下部署Java,Tomcat环境
- 非标机械设计该怎么做,老机械工程师告诉你
- 软路由初次尝试者的折腾指南
- python自动分箱,计算woe,iv
- 安徽大学计算机科学与技术考研科目,2020安徽大学计算机专业课调整
- 计算机组成原理计算题整理
- STM32__04—PMW呼吸灯
- 使用jsp+servlet来实现增加和删除功能
- 如何在路演中获得投资机会|兆骑科创
- Aspose.Slides使用教程:使用 C++ 在 PowerPoint 演示文稿中添加幻灯片切换
热门文章
- i5 1155G7 怎么样相当于什么水平
- 跟着iMeta学做图|circlize绘制和弦图展示样本物种相对丰度
- 毕设-基于Javaweb药品销售管理系统
- 再见收费的Navicat,操作所有数据库就靠它了
- 四足机器人运动运动控制系统及相关算法、导航系统及相关算法本人硕毕论文发表后再更
- java enumeration 创建_Java Enumeration接口 - Java 教程 - 自强学堂
- 云之梦php免费教学视频下载_云知梦PHP基础入门视频教程 PHP全套基础教程 共52课...
- C# 以管理员权限删除文件
- 使用kNN算法对魔方颜色进行分类
- 软件企业测试团队的组织架构