计算机术语hpp,HPP(计算机术语)_百度百科
HPP,计算机术语,指用C/C++语言编写的头文件,通常用来定义数据类型,声明变量、函数、结构和类。[1]
外文名
HPP
实 质
将.cpp实现代码混入.h头文件当中特 点
定义与实现都包含在同一文件
只需要
include该hpp文件即可
HPPC++含义
编辑
语音
hpp,其实质就是将.cpp的实现代码混入.h头文件当中,定义与实现都包含在同一文件,则该类的调用者只需要include该hpp文件即可,无需再 将cpp加入到project中进行编译。而实现代码将直接编译到调用者的obj文件中,不再生成单独的obj,采用hpp将大幅度减少调用 project中的cpp文件数与编译次数,也不用再发布烦人的lib与dll,因此非常适合用来编写公用的开源库。
1、是Header Plus Plus 的简写。
2、与*.h类似,hpp是C++程序头文件 。
3、是VCL 专用的头文件,已预编译。
4、是一般模板类的头文件。
5、一般来说,*.h里面只有声明,没有实现,而*.hpp里声明实现都有,后者可以减 少.cpp的数量。
HPP注意问题
编辑
语音
*.hpp要注意的问题有:
a)不可包含全局对象和全局函数
由于hpp本质上是作为.h被调用者include,所以当hpp文件中存在全局对象或者全局函数,而该hpp被多个
调用者include时,将在链接时导致符号重定义错误。要避免这种情况,需要去除全局对象,将全局函数封
装为类的静态方法。
b)类之间不可循环调用
在.h和.cpp的场景中,当两个类或者多个类之间有循环调用关系时,只要预先在头文件做被调用类的声明
即可,如下:
class B;
class A{
public:
void someMethod(B b);
};
class B{
public:
void someMethod(A a);
};
在hpp场景中,由于定义与实现都已经存在于一个文件,调用者必需明确知道被调用者的所有定义,而不能等到cpp
中去编译。因此hpp中必须整理类之间调用关系,不可产生循环调用。同理,对于当两个类A和B分别定义在各自的
hpp文件中,形如以下的循环调用也将导致编译错误:
//a.hpp
#include "b.hpp"
class A{
public:
void someMethod(B b);
};
//b.hpp
#include "a.hpp"
class B{
public:
void someMethod(A a);
}
c)不可使用静态成员
静态成员的使用限制在于如果类含有静态成员,则在hpp中必需加入静态成员初始化代码,当该hpp被多个文档include时,将产生符号重定义错误。唯 一的例外是const static整型成员,因为在vs2003中,该类型允许在定义时初始化,如:
class A{
public:
const static int intValue = 123;
};
由于静态成员的使用是很常见的场景,无法强制清除,因此可以考虑以下几种方式(以下示例均为同一类中方法)
一、类中仅有一个静态成员时,且仅有一个调用者时,可以通过局域静态变量模拟
//方法模拟获取静态成员
someType getMember()
{
static someType value(xxx);//作用域内静态变量
return value;
}
二、.类中有多个方法需要调用静态成员,而且可能存在多个静态成员时,可以将每个静态成员封装一个模拟方法,供其他方法调用。
someType getMemberA()
{
static someType value(xxx);//作用域内静态变量
return value;
}
someType getMemberB()
{
static someType value(xxx);//作用域内静态变量
return value;
}
void accessMemberA()
{
someType member = getMemberA();//获取静态成员
};
//获取两个静态成员
void accessStaticMember()
{
someType a = getMemberA();//获取静态成员
someType b = getMemberB();
};
三、第二种方法对于大部分情况是通用的,但是当所需的静态成员过多时,编写封装方法的工作量将非常
巨大,在此种情况下,建议使用Singleton模式,将被调用类定义成普通类,然后使用Singleton将其变为
全局唯一的对象进行调用。
如原h+cpp下的定义如下:
class A{
public:
type getMember(){
return member;
}
static type member;//静态成员
}
采用singleton方式,实现代码可能如下(singleton实现请自行查阅相关文档)
//实际实现类
class Aprovider{
public:
type getMember(){
return member;
}
type member;//变为普通成员
}
//提供给调用者的接口类
class A{
public:
type getMember(){
return Singleton::getInstance()->getMember();
}
}
参考资料
1.
HPP简介
.词霸[引用日期2015-06-18]
计算机术语hpp,HPP(计算机术语)_百度百科相关推荐
- 计算机术语fsb是什么意思,fsb(电脑术语:前端总线)_百度百科
fsb (电脑术语:前端总线) 语音 编辑 锁定 讨论 上传视频 前端总线"这个名称是由AMD在推出K7 CPU时提出的概念,但是一直以来都被大家误认为这个名词不过是外频的另一个名称.我们所 ...
- 云大博士计算机系的刘明,刘明(西南大学计算机与信息科学学院讲师)_百度百科...
刘明 (西南大学计算机与信息科学学院讲师) 语音 编辑 锁定 讨论 上传视频 中文名 刘明 国 籍 中国 民 族 汉族职 业 教师[1] 学位/学历 博士[1] 专业方向 人工智能与 ...
- 王峻 非西南大学计算机与信息科学学院教授,李莉(西南大学计算机与信息科学学院教授)_百度百科...
李莉 (西南大学计算机与信息科学学院教授) 语音 编辑 锁定 讨论 上传视频 李莉, 西南大学计算机与信息科学学院教授, 博士生导师, 澳大利亚Swinburne University of Tech ...
- 湖南大学计算机科学与技术导师,肖德贵(湖南大学计算机与通信学院教师)_百度百科...
肖德贵 (湖南大学计算机与通信学院教师) 语音 编辑 锁定 讨论 上传视频 本词条缺少概述图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 肖德贵,男,1972年2月出生,湖南省南县人,博士 ...
- 华南理工大学计算机应用技术如何,余志文(华南理工大学计算机学院教授、博导)_百度百科...
Zhiwen Yu, Yidong Zhang, C. L. Philip Chen, Jane You, Hau-San Wong, Dan Dai, Si Wu, Jun Zhang, " ...
- 路西法效应_百度百科
路西法效应_百度百科 路西法效应_百度百科 路西法效应 求助编辑百科名片 路西法效应 路西法效应 社会科学工作者很少使用"善"."恶" ...
- 为什么放弃治疗_百度百科
为什么放弃治疗_百度百科 为什么放弃治疗
- 弗拉明戈舞_百度百科
弗拉明戈舞_百度百科 弗拉明戈舞 编辑 弗拉明戈舞简介"弗拉明戈"不仅是歌(cante).舞(baile)和吉他音乐(toque)的三合一艺术,也代表着一种慷慨.狂 ...
- QS世界大学排名_百度百科
QS世界大学排名_百度百科 莱斯特大学
- 你若安好便是晴天_百度百科
你若安好便是晴天_百度百科 你若安好便是晴天 这是一个多义词,请在下列义项中选择浏览 1.人物传记2.杨钰莹原唱歌曲3.蝴蝶季言情小说 林徽因,一代风华的绝世佳人,才华横溢倾倒众生:让徐志摩.梁思成. ...
最新文章
- value_counts()
- mac 安装Pillow
- Ubuntu13.04 下源码安装Rapidsvn
- select2的一些特性效果
- 《假如编程是魔法之零基础看得懂的Python入门教程 》——(三)使用初始魔法跟编程魔法世界打个招呼吧
- C++从vector中删除指定元素
- linux软件安装非系统盘,linux操作系统可不可以像安装windows软件一样在windows系统下的硬盘上安装...
- 开发工具 - Reflector
- 分享一个IIS日志分析工具-LogParse
- PHP7通过yum源安装及性能测试
- 线性时间选择(C++):求第k小的数
- Sobel边缘检测算子的本质
- 苹果待处理订单要多久_苹果官网准备发货到发货要多久呀?
- WIN2003 R2安装EPSON6200L打印机问题解决
- html表格美化模板,JavaScript + CSS 美化出的条纹表格样式
- 成都工控开发:太简单了!串口触摸屏开发HMI的全流程介绍
- 倚天屠龙记君临天下_战斗系统
- 功率放大芯片采用RFX2411 分集开关的2.4 GHz TX / RX增强器
- 用计算机打字教案,《打字机》教案
- 数据挖掘BUC算法计算冰山立方体的python实现
热门文章
- python项目代做_ECS 170代做、代写Python、data代做、代做Python程序代写Web开发|代写Database...
- 最大连续子序列和问题python_面试题42:连续子数组的最大和 python
- https端口号_Wireshark使用以及https
- Win10装Ubuntu双系统步骤做法
- 部署java的tcp服务端_java网络编程(TCP)-服务端
- 力扣-1791. 找出星型图的中心节点
- Kotlin — 在一个项目中混用 Java 与 Kotlin(混合开发)
- Flutter学习 — 从新页面返回数据给上一个页面
- 4_while循环结构和breakcontinue
- PotPlayer 禁止更新