包括.h文件

时间:2010-05-18 09:26:53

标签: c++ coding-style

假设我有两个.h文件:A.h和B.h. 此外,A.h包括B.h本身:

B.h - 定义B类。

class B {
  ...
};

A.h - 定义A类,它使用B类。

#include B.h

class A {
  void SomeFunction(const B& b);
};

现在,我有一些.cpp文件,它同时使用A和B类(B类不仅可以用在A :: SomeFunction(B)中)

从设计模式和编码风格的角度来看,包括A.h和B.h(而不仅仅是A.h)的优点是什么。

3 个答案:

答案 0 :(得分:6)

包括“A.h”和“B.h”使得依赖关系完全清晰。没有理由为什么“A.h”不能具有前向声明的B类,因此如果将传递包括更改为前向声明,则包括两个标题都会阻止您的“.cpp”文件中断。一般来说,依赖传递包含并不是一个好主意,而是应该明确包含所有直接依赖关系。 (请注意,这不适用于旨在提供传递包含的“主要包含”标题。)

答案 1 :(得分:3)

这与设计模式无关。你需要使用B类时包含Bh,只要你需要使用A类,你就会包含Ah。如果B类是A类的设计细节,或者与它密切相关,那就把它放在啊而不是在单独的头文件中。

答案 2 :(得分:0)

我想指出,当你有头文件时,你应该有一个定义,以确保它不包括两次。

例如:

A.H:

#ifndef _A_H_
#define _A_H_

class A 
{
};

#endif

B.h:

#ifndef _B_H_
#define _B_H_

#include "a.h"

class B : public A
{
};

#endif

我认为上述内容最有意义,因为现在您可以根据需要多次包含A和B,但不会多次编译。