下述用C++写2个类互相包含时头文件的组织方法。
比如,一个类为cat,一个类为dog,要求cat具有成员变量
1
|
dog*
doggy |
dog具有成员变量
1
|
cat*
catty |
其实4个文件可以搞定:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
//cat.h #pragma
once class
dog; class
cat { public : dog
*doggy; dog*
getDoggy(); }; //dog.h #pragma
once class
cat; class
dog { public : cat
*catty; cat*
getCatty(); }; //cat.cpp #include
"cat.h" #include
"dog.h" dog*
cat::getDoggy() { doggy
= new
dog(); return
doggy; } //dog.cpp #include
"dog.h" cat*
dog::getCatty() { return
catty; } |
头文件组织的原则:
- 非模板类声明和定义分开。声明放在.h中,定义放在.cpp中;
- 防止头文件重复包含。有两种方法,一种是
1
#pragma once
1#ifndef...#define...#endif
- 用户自定义头文件间有相互依赖关系时尽可能用前向声明而不是#include。比如上面的cat.h,如果把
1
class
dog;
1#include "dog.h"
此时头文件的组织没有上述类型的冲突,.cpp文件只需拿来就用即可。
Note. cat.cpp必须包含dog.h是因为调用了dog类的构造函数。