1. .h和.hpp区别

.hpp,本质就是将.cpp的实现代码混入.h头文件当中,定义与实现都包含在同一文件,则该类的调用者只需要include该.hpp文件即可,无需再将cpp加入到project中进行编译。而实现代码将直接编译到调用者的obj文件中,不再生成单独的obj,采用hpp将大幅度减少调用project中的cpp文件数与编译次数,也不用再发布lib与dll文件,因此非常适合用来编写公用的开源库。

hpp的优点不少,但是编写中有以下几点要注意:
1、是Header Plus Plus的简写。(.h和.hpp就如同.c和.cpp似的)
2、与.h类似,.hpp是C++程序头文件格式。
3、是VCL专用的头文件,已预编译。
4、是一般模板类的头文件。
5、一般来说,.h里面只有声明,没有实现,而.hpp里声明实现都有,后者可以减少.cpp的数量。
6、.h里面可以有using namespace std,而.hpp里则无。
7、不可包含全局对象和全局函数。

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

2什么是全局类对象

可能我这个全局类的说法不是很准确,不过其实就是变量的扩展延伸。
比如你想把一个类让全部的CPP都能用,而不是一个变量,那么需要这样定义:

假设有一个预编译头stdafx.h

在stdafx.h中加入你想要的全局类的头文件: include “CMyClass.h” ;
在stdafx.cpp中加入类的定义 如:CMyClass myclass;
在你想要用到该全局CMyClass类的其他类CTestProjectApp.h的头文件中: include “stdafx.h”,并在CTestProjectApp.h类的头文件的开头处(class 声明的前面)加上 extern CMyClass Myclass;
记得初始化。
比如有如下代码:

step1: 预编译头stdafx.h 或者单独的其他头文件:

#include <iostream>
#include "CMyClass.h"

step2: stdafx.cpp

#include "stdafx.h"
CMyClass myclass;

step3: 使用全局类的其他类CTestProjectApp.h:

#include "stdafx.h"
#include "CTestProjectApp.h"
extern CMyClass Myclass;class CTestProjectApp
{....
void test();
}

step4: 记得在CTestProjectApp.cpp中初始化该全局类:

#include "CTestProjectApp.h"
void CTestProjectApp::test()
{Myclass = new CMyClass();
}

.h文件和.hpp区别相关推荐

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

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

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

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

  3. c++中 .hpp和.h文件的区别

    .hpp文件 本质:将.cpp的实现代码混入.h头文件当中,使定义与实现都在同一文件.对该类的调用只需要include该.hpp文件,不需要将cpp加入编译.实现代表直接编译到调用者的.obj文件中, ...

  4. C++大型项目中使用hpp和h文件代替cpp

    文章目录 1.hpp头文件与h头文件的区别: 2.msf中代码分析 2.1利用hpp实现 2.2利用h文件实现 1.hpp头文件与h头文件的区别: (1) hpp,其实质就是将.cpp的实现代码混入. ...

  5. C语言中 *.c和*.h文件的区别!

    C语言中 *.c和*.h文件的区别!      这是HR面试我的一道题,没技术上含量,不过细想起来,还是C语言的最基本的知识!俗话说,目标决定动力,细节决定成败! C文件就是C语言系列的源文件,而H文 ...

  6. vs cpp生成h文件_lib 和 dll 的区别、生成以及使用详解

    (给CPP开发者加星标,提升C/C++技能) 来源:tenoshttps://www.cnblogs.com/TenosDoIt/p/3203137.html [导读]:在日常开发中,我们只需要知道l ...

  7. .c和.h文件的区别(转载)

    一个简单的问题:.c和.h文件的区别 学了几个月的C语言,反而觉得越来越不懂了.同样是子程序,可以定义在.c文件中,也可以定义在.h文件中,那这两个文件到底在用法上有什么区别呢? 2楼: 子程序不要定 ...

  8. .c和.h文件的区别

    一个简单的问题:.c和.h文件的区别 学了几个月的C语言,反而觉得越来越不懂了.同样是子程序,可以定义在.c文件中,也可以定义在.h文件中,那这两个文件到底在用法上有什么区别呢? 2楼: 子程序不要定 ...

  9. C语言后缀.h文件和.c文件作用和区别

    简述C语言中.h文件和.c文件作用和区别 在c语言学习过程中,对.h文件和.c文件不甚了解,参考其他资料后对它进行简要分析: .h文件和.c文件作用 使用.h文件和.c文件的原因 .h文件和.c文件作 ...

最新文章

  1. Unity的旋转-四元数,欧拉角用法简介
  2. jupyter notebook python插件_VS Code Python 将支持 Jupyter Notebook
  3. MySQL数据类型及范围用法一览表
  4. C#调用API弹出打印机属性对话框
  5. python指定进程断网_python通过scapy模块进行arp断网攻击
  6. Berenson机器人艺术鉴赏家亮相切尔西画廊
  7. Java Servlet的配置文件web.xml配置内容和具体含义
  8. 欧式墙纸素材高清纹样图案,美观又大气
  9. php插件改名,自制functions.php文件or插件,防止升级或更换主题时被替换
  10. 解决Centos7安装docker源问题
  11. Js、Jquery密码输入框的密码显示与隐藏
  12. matlab隐函数参数拟合,matlab拟合隐函数参数(1stOpt拟合7参数请求代跑)
  13. 《个人信息安全规范 (2019-6-21) 》征求意见稿的最新变化
  14. 服务器备案全流程超级详细
  15. VSCode Remote SSH 过程试图写入的管道不存在
  16. 规范化:范式(主属性,非主属性,1NF,2NF,3NF,BCNF:定义,例子等)
  17. Three.js——天空盒
  18. 美国计算机转教育专业,2021年可以申请转专业计算机科学CS专业的这3所美国大学 可别错过哟!...
  19. 登东山而小鲁,登泰山而小天下
  20. Tue Jun 28 2022 15:30:29 GMT+0800 (中国标准时间) 日期格式化

热门文章

  1. vue项目中使用echarts-地图
  2. PaddleOCR---基于Python引擎的PP-OCR模型库推理
  3. APP的兴起,是普通SEO站长的没落吗?
  4. cifar10_input的distorted_inputs功能介绍
  5. 基于PHP的校园共享单车管理系统
  6. texstudio本地编译\emph不显示
  7. ArcGIS Pro免费试用申请与安装配置
  8. 基于SparkStreaming的实时数据清洗
  9. 图像梯度算子——Sobel/scharr/Laplacian
  10. zepto ajax php实例,读Zepto源码之Ajax模块