头文件包含在纯虚拟类中

时间:2012-02-15 09:17:12

标签: c++

如果我有一个类似以下的纯虚拟类:

我有以下类结构:

class interface_class {
    virtual void someFunction(MyClassA& a) = 0;
    virtual void someFunction(MyClassB& b) = 0;
}

包含MyClassA / MyClassB的正确方法是什么?我应该在接口类的头文件中做一些前向声明,并在实现的头文件中真正包含,还是应该直接在接口类中包含MyClassA / B的头文件?

2 个答案:

答案 0 :(得分:5)

对两个类使用前向声明 实际上,无论何时何地都要使用前瞻性声明 使用前向声明可以节省编译时间和时间。还限制您创建不需要的依赖项。

答案 1 :(得分:1)

您应该在单独的头文件中使用前向声明。

即您拥有当前头文件,其定义为MyClassAMyClassB。您需要同时对使用的类进行分组,并创建一个新的头文件,如下所示:

文件MyClassesFwd.h(由您决定的命名惯例)

namespace XX {
     class MyClassA;
     class MyClassB;
}

您的界面标题:

#include <MyClassesFwd.h>
// ... your interface definition ...

另一方面,实际的源文件将如下所示:

#include <MyClassA.h>
#include <MyClassB.h>
#include <MyInterface.h>

这将阻止您每次都重写前向声明。