C++中接口类应该放在哪里

Rub*_*n-J 7 c++

我是 C++ 编程新手,并且很难组织我的项目。我有一个名为 StateManager 的类,它有一个头文件和一个 cpp 文件。cpp 包含所有实现。

如果我现在想要创建一个 Interface 类:

class IStateManager
{
    public:
        virtual ~IStateManager() {}   
        virtual void SomeMethod {}
};
Run Code Online (Sandbox Code Playgroud)

我知道接口并不像 C# 或 Java 中那样真正存在,但我希望多个类从这个“接口”继承。

这个类还需要头文件和cpp文件吗?或者我可以把它放在头文件中吗?

Chr*_*gis 6

从技术上讲,C++ 没有接口。但是,可以通过多重继承(如果您的类是“基”类并且不需要从多个类继承)的方式“创建”接口。您的“界面”位于何处完全取决于您。但是,如果您计划使用类作为接口(没有任何实际实现,因为从技术上讲,接口在子类中定义函数之前没有实现),我会将其放在它自己的头文件中,并将每个函数声明为纯函数虚拟的:

class IStateManager
{
    public:
        virtual ~IStateManager() {}
        virtual void SomeMethod() = 0;
        virtual void AnotherMethod() = 0;
};

class TheState : public IStateManager, public SomeOtherParentClass
{
    virtual void SomeMethod(); // Defined in this class
    virtual void AnotherMethod(); // Also defined in this class
    //..
};
Run Code Online (Sandbox Code Playgroud)

如果您在 .cpp 中为该类定义一些实现IStateManager,那么您实际上拥有更多的抽象类而不是接口。

所以总而言之,我要说的是:“接口”的任何实现都应该在其实现类的 .cpp 文件中定义。如果您计划在多个文件中使用该接口,我会为其创建一个单独的 .h 文件。