http://www.cplusplus.com/forum/articles/10627/

1.hpp文件

hpp文件可以使用template函数和class静态函数(不含静态成员)

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时,将产生符号重定义错误。

2.

#ifndef MATH_HPP_
#define MATH_HPP_

//内容

#endif

3.多个类互相包含使用指针,不要用成员。

最新文章

  1. 2016弱校联盟十一专场10.3---Similarity of Subtrees(深搜+hash、映射)
  2. 【Netty学习】 ChannelInitializer 学习
  3. python扫描内网banner信息
  4. SpringJUnit4加载类目录下(src)和WEF-INF目录下的配置文件
  5. prefuse学习(一)用非数据库连接和xml的方式读入数据
  6. spring与axis2整合发布webservice
  7. python列表推导和字典推导
  8. c语言,变长数组
  9. linux脚本后台监控执行指定程序的状态(假设程序是死的重新启动程序)
  10. Android非常实用的开源项目框架
  11. OSPF 高级实验
  12. ring0与ring3通信方式
  13. 记录一次程序输出和DB查询不匹配的问题
  14. JavaSE 软件工程师 认证考试试卷2
  15. bzoj2870最长道路tree——边分治
  16. SpringBank 开发日志 一种简单的拦截器设计实现
  17. [JS] ECMAScript 6 - String, Number, Function : compare with c#
  18. 当超强台风“山竹”即将冲进南海,Power BI 你怎么看?
  19. JFinal中文件上传后会默认放置到WebContent的upload包下,但是tomcat会自动重启,当我们再次打开upload文件夹查看我们刚刚上传的文件时,发现上传的文件已经没有了。
  20. Codeforces Round #540 (Div. 3)--1118B - Tanya and Candies(easy TL!)

热门文章

  1. 关于 div 的 contenteditable 使用,placeholder 和 复制图片显示并上传,按住 enter+ctrl 内容换行
  2. 转载的web server实例
  3. 实验隐藏参数"_allow_resetlogs_corruption"的使用
  4. HTML 鼠标坐标和元素坐标
  5. java.lang.ClassNotFoundException: com.sun.xml.ws.spi.ProviderImpl解决办法
  6. TheFatRat一般使用
  7. PowerShell 语法备忘
  8. [Luogu]A%BProblem——线性筛素数与前缀和
  9. java8学习笔记之lambda表达式
  10. GO数据类型