今天主要叙述三个问题,是在做一个小游戏程序遇到的。
include头文件放到.h文件还是.cc文件
首先看这个问题,链接C++ 在.h文件中包含头文件和在.cpp文件中包含头文件有什么区别
非常好描述了利弊,我总结一下:
- 头文件中尽量不要include其他文件,一个是防止头文件相互引用问题,一个是提高编译速度(减少编译工作量)。所以尽量在源文件cc中include。名字空间也尽量放在源文件。也就是说头文件包含的东西要尽量少。
- 如果要用到其他类,可以用class前置声明。
- 头文件加宏定义
- 继承某个类需要include该类
头文件相互引用问题(引用其他类)
当头文件中要使用其他类时,在头部声明该类,然后在源文件中include该类。不要在头文件中include。
#ifndef __HERO_H__
#define __HERO_H__
class Weapon;
class binbin;
class Hero
{
public:
Hero(/* args */);
~Hero();
std::string m_Name;
int m_Atk;
int m_Def;
int m_Hp;
Weapon *weapon;
void EquipWeapon(Weapon *weapon);
void Attack(binbin *binbin);
};
#endif
这样当出现头文件互相引用时就不会报错。
但是当要继承某个类时,就需要include该类:
#ifndef __KNIFE_H__
#define __KNIFE_H__
#include "Weapon.h"
class Knife : public Weapon
{
public:
Knife();
//子类要实现就不写成纯虚函数了
virtual int getBaseDamage();
virtual int getSuckBlood();
virtual bool getHold();
virtual bool getCrit();
};
#endif
多源文件编译命令
当我们完成一个项目,肯定要进行多个文件联合编译,使用G++编译器来进行编译
g++ playgame.cc binbin.cc Hero.cc DragonSword.cc Knife.cc -o play
-o 后为编译后可运行程序名称
头文件不需要编译,因为已经包括在源文件中,只需要编译所有的源文件