C++中头文件和头文件保护符的理解

之前一直对《c++primer》中的头文件这一块了解的不够深入,今天问了同学,加上自己查了资料,现在就我目前所知道的知识对,头文件作一个我自己的理解,以后如果还有更深入的理解,我会及时更新此博客。

头文件的作用:

个人理解就是,怕.cpp文件中内容太长,而且容易引起混乱和冗余而出现的。
  比如我们定义一个类,为A类,假设有10个cpp文件都要定义这个类。我们分别在10个cpp文件中分别定义1次这个A类,这样显然是不合理的。所以我们用把这个类的定义写在头文件中,以后的cpp文件只要导入这个头文件就可以使用这个A类了。

头文件相当于文本替换

例:
aaa.h头文件内容如下:
class A{}
bbb.h头文件内容如下:
#include
class B{ }
则bbb.h相当于是如下内容:
class A{}
class B{}

如果我还有一个ccc.h的头文件,定义如下:
#include
#include

那么ccc.h中的内容相当于:
class A{}
class A{}
class B{}

那么这样A类被定义了两次,我们要如何避免这种情况呢?
引入:
#ifndef
#define
#endif

例如:
在上面的例子中,aaa.h文件定义改成:
#ifndef AAA_H //如果没有定义AAA_H这个宏,就执行下面的操作,如果有,就跳过下面一段
#define AAA_H
class{}
#endif

bbb.h和ccc.h也这样定义。
#ifndef CCC_H
#define CCC_H
#include
#include
#endif

那么程序执行时,ccc.h相当于:
先定义一个CCC_H的宏
执行#include时,aaa.h中的内容已经有了一个AAA_H宏和class A{}
再执行#include时,bbb.h中的内容为一个AAA_H宏和class A{}、后面已经有了AAA_H这个宏了,所以不会重复定义了,然后在生成BBB_H宏、class B{},所以最后的内容为AAA_H,BBB_H,class A{},class B{}

你可能感兴趣的:(c++)