C++學習筆記 —— 頭文件include問題和多文件編譯

今天主要敘述三個問題,是在做一個小遊戲程序遇到的。

include頭文件放到.h文件還是.cc文件

首先看這個問題,鏈接C++ 在.h文件中包含頭文件和在.cpp文件中包含頭文件有什麼區別
非常好描述了利弊,我總結一下:

  1. 頭文件中儘量不要include其他文件,一個是防止頭文件相互引用問題,一個是提高編譯速度(減少編譯工作量)。所以儘量在源文件cc中include。名字空間也儘量放在源文件。也就是說頭文件包含的東西要儘量少。
  2. 如果要用到其他類,可以用class前置聲明。
  3. 頭文件加宏定義
  4. 繼承某個類需要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 後爲編譯後可運行程序名稱
頭文件不需要編譯,因爲已經包括在源文件中,只需要編譯所有的源文件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章