今天主要敘述三個問題,是在做一個小遊戲程序遇到的。
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 後爲編譯後可運行程序名稱
頭文件不需要編譯,因爲已經包括在源文件中,只需要編譯所有的源文件