love in C++, live on MFC

to get ready...

C++博客 首页 新随笔 联系 聚合 管理
  47 Posts :: 0 Stories :: 97 Comments :: 0 Trackbacks
C++编程规范中第23条中说:
If one header file won't work unless the file that includes it also includes another header, that's gauche and puts unnecessary burden on that header file's users.
呵呵,英语有点拗口,后面举的例子也都是模板的例子。我倒是遇到过一个实际的例子,简化后如下:
//a.h
class A 
{
 
int
 a;
};
 
//b.h
//注意:b.h并没有include a.h
class B 
{
 A a;
};
 
用的时候怎么用呢?比如在main.cpp中想用class B
//main.cpp
#include "a.h"
#include 
"b.h"
//
B b;
//

//do something on b
可以看到,main为了使用B,还得包含a.h,这就是上面一段英语说的:
如果一个头文件(b.h)不能工作,除非包含它(b.h)的文件(也就是main.cpp)也包含另一个头文件(a.h)...

hehe,当我第一次遇到这种情况时,想了半天也想不明白为什么我明明包含了b.h还是不能用B啊

那么,正确的写法应该是什么呢?
在类B的作者在设计B的时候,就应该想到用户只需要#include "b.h"就可以使用这个class B。所以,在b.h文件中,应该写明#include "a.h",而不是让用户在main.cpp中去include "a.h"

:)
posted on 2006-06-23 20:56 flyingxu 阅读(1743) 评论(5)  编辑 收藏 引用 所属分类: C/C++C++ Coding Standards

Feedback

# re: Make header files self-sufficient的一个例子 2006-06-27 21:18 Jonlee
呵呵,你真粗心  回复  更多评论
  

# re: Make header files self-sufficient的一个例子 2006-07-05 09:17 mr_xu
以你举的例子为例,怎么写才算是好性能的呢?  回复  更多评论
  

# re: Make header files self-sufficient的一个例子 2006-07-06 17:40 flyingxu
@mr_xu
在类B的作者在设计B的时候,就应该想到用户只需要#include "b.h"就可以使用这个class B。所以,在b.h文件中,应该写明#include "a.h",而不是让用户在main.cpp中去include "a.h"
  回复  更多评论
  

# re: Make header files self-sufficient的一个例子 2006-07-07 15:13 yifanernei
这么说也有道理了,但这样的话如果项目太大,对a.h的一点变动就要把B类的相关文件全部编译一次,有可能会大大增加编辑的时间.各有所长吧,根据需要来决定
其实不在b.h中包含a.h对系统的结构设计也有好处的,个人认为应该想办法改进结构,使得不用在main中包含,而不是把a.h写在b.h中.

另外,楼主的第一种写法是否能编译通过很值得怀疑,这种写法应该不是在main中需要a.h,而是在b.h中需要a.h,通常我的做法是:

//a.h
class A
{
int a;
};

//a.cpp
#include a.h
//....



//b.h

class A;

class B
{
A & b; //或者 A * b;
// ....
};


//b.cpp
#include a.h //把a.h放在.cpp中,而不是.h中
#include b.h

//....



//main.cpp

#include "b.h" //这里只需要包含b.h

int main()
{
B b;
//...


}  回复  更多评论
  

# re: Make header files self-sufficient的一个例子 2006-07-09 01:57 flyingxu
@yifanernei
呵呵,看过你的文章。
能编译是肯定的,关键是include的理解了,include实际上就是把文件整个copy到当前位置而已,呵呵。  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理