尽管类的定义可以在函数中进行,但是这样定义的类的使用却受到了很多的限制。所以累的定义一般都放在函数外面。
在各个源文件中,类的定义只有一次,并且有不同的源文件需要使用到这个类。为了保持类雷伊的一致性,类通常被定义在头文件中。
而且,类所在的头文件的名字应该和类名一样。
通常头文件包含哪些只能被定义一次的实体。比如,const和constexpr变量等。
头文件之间也许会相互之间需要使用。这是就需要用一个头文件去包含另一个头文件。如果出现头文件a.h和b.h都需要使用string.h的功能,但是b.h又需要使用a.h的功能,就会
出现重复包含string.h的情况。这时候就需要我们在书写头文件的时候做一些处理,以免被多次包含了。
预处理器
确保头文件多次包含仍能安全工作的常用技术是预处理技术,他是c++由c语言继承来的。
预处理器在编译之前执行一段程序,它可以部分的改变我们所写的程序。
之前我们已经用到的的预处理功能是#include,当预处理看到#include标记就会用指定的头文件内容代替#include。
c++程序还会用到的一项预处理功能是头文件保护符。
头文件保护符依赖于预处理变量#define,预处理变量有两种状态:已定义和未定义。
#define用来定义预处理变量。
#ifdef当且紧当预处理变量已经定义为真
#ifndef当且紧当预处理变量未定义为真
一旦检查结果为真则执行后续操作至#endif
创建Book.h文件
文件内容:
#ifndef BOOK_H
#define BOOK_H
#include <string>
struct Book{
int bookId;
string bookName{""};
double revenue = {0};
};
#endif
这样的话第一次包含Book.h的时候就会定义预处理变量BOOK_H。下次就不会再包含book.h了。