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(计算机术语)_百度百科相关推荐

  1. 计算机术语fsb是什么意思,fsb(电脑术语:前端总线)_百度百科

    fsb (电脑术语:前端总线) 语音 编辑 锁定 讨论 上传视频 前端总线"这个名称是由AMD在推出K7 CPU时提出的概念,但是一直以来都被大家误认为这个名词不过是外频的另一个名称.我们所 ...

  2. 云大博士计算机系的刘明,刘明(西南大学计算机与信息科学学院讲师)_百度百科...

    刘明 (西南大学计算机与信息科学学院讲师) 语音 编辑 锁定 讨论 上传视频 中文名 刘明 国    籍 中国 民    族 汉族职    业 教师[1] 学位/学历 博士[1] 专业方向 人工智能与 ...

  3. 王峻 非西南大学计算机与信息科学学院教授,李莉(西南大学计算机与信息科学学院教授)_百度百科...

    李莉 (西南大学计算机与信息科学学院教授) 语音 编辑 锁定 讨论 上传视频 李莉, 西南大学计算机与信息科学学院教授, 博士生导师, 澳大利亚Swinburne University of Tech ...

  4. 湖南大学计算机科学与技术导师,肖德贵(湖南大学计算机与通信学院教师)_百度百科...

    肖德贵 (湖南大学计算机与通信学院教师) 语音 编辑 锁定 讨论 上传视频 本词条缺少概述图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 肖德贵,男,1972年2月出生,湖南省南县人,博士 ...

  5. 华南理工大学计算机应用技术如何,余志文(华南理工大学计算机学院教授、博导)_百度百科...

    Zhiwen Yu, Yidong Zhang, C. L. Philip Chen, Jane You, Hau-San Wong, Dan Dai, Si Wu, Jun Zhang, " ...

  6. 路西法效应_百度百科

    路西法效应_百度百科 路西法效应_百度百科 路西法效应     求助编辑百科名片     路西法效应      路西法效应 社会科学工作者很少使用"善"."恶" ...

  7. 为什么放弃治疗_百度百科

    为什么放弃治疗_百度百科 为什么放弃治疗

  8. 弗拉明戈舞_百度百科

    弗拉明戈舞_百度百科 弗拉明戈舞     编辑     弗拉明戈舞简介"弗拉明戈"不仅是歌(cante).舞(baile)和吉他音乐(toque)的三合一艺术,也代表着一种慷慨.狂 ...

  9. QS世界大学排名_百度百科

    QS世界大学排名_百度百科 莱斯特大学

  10. 你若安好便是晴天_百度百科

    你若安好便是晴天_百度百科 你若安好便是晴天 这是一个多义词,请在下列义项中选择浏览 1.人物传记2.杨钰莹原唱歌曲3.蝴蝶季言情小说 林徽因,一代风华的绝世佳人,才华横溢倾倒众生:让徐志摩.梁思成. ...

最新文章

  1. value_counts()
  2. mac 安装Pillow
  3. Ubuntu13.04 下源码安装Rapidsvn
  4. select2的一些特性效果
  5. 《假如编程是魔法之零基础看得懂的Python入门教程 》——(三)使用初始魔法跟编程魔法世界打个招呼吧
  6. C++从vector中删除指定元素
  7. linux软件安装非系统盘,linux操作系统可不可以像安装windows软件一样在windows系统下的硬盘上安装...
  8. 开发工具 - Reflector
  9. 分享一个IIS日志分析工具-LogParse
  10. PHP7通过yum源安装及性能测试
  11. 线性时间选择(C++):求第k小的数
  12. Sobel边缘检测算子的本质
  13. 苹果待处理订单要多久_苹果官网准备发货到发货要多久呀?
  14. WIN2003 R2安装EPSON6200L打印机问题解决
  15. html表格美化模板,JavaScript + CSS 美化出的条纹表格样式
  16. 成都工控开发:太简单了!串口触摸屏开发HMI的全流程介绍
  17. 倚天屠龙记君临天下_战斗系统
  18. 功率放大芯片采用RFX2411 分集开关的2.4 GHz TX / RX增强器
  19. 用计算机打字教案,《打字机》教案
  20. 数据挖掘BUC算法计算冰山立方体的python实现

热门文章

  1. python项目代做_ECS 170代做、代写Python、data代做、代做Python程序代写Web开发|代写Database...
  2. 最大连续子序列和问题python_面试题42:连续子数组的最大和 python
  3. https端口号_Wireshark使用以及https
  4. Win10装Ubuntu双系统步骤做法
  5. 部署java的tcp服务端_java网络编程(TCP)-服务端
  6. 力扣-1791. 找出星型图的中心节点
  7. Kotlin — 在一个项目中混用 Java 与 Kotlin(混合开发)
  8. Flutter学习 — 从新页面返回数据给上一个页面
  9. 4_while循环结构和breakcontinue
  10. PotPlayer 禁止更新