假设我有两个.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)的优点是什么。
答案 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,但不会多次编译。