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 后为编译后可运行程序名称
头文件不需要编译,因为已经包括在源文件中,只需要编译所有的源文件

发布了103 篇原创文章 · 获赞 94 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/chongbin007/article/details/104456383