在 c++ 中放置接口类的位置

Where to put an interface class in c++

本文关键字:位置 接口 c++      更新时间:2023-10-16

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

如果我现在想创建一个接口类:

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

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

此类是否还需要标头和 cpp 文件?或者我可以把它放在头文件中吗?

从技术上讲,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
    //..
};

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

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

您可以将类方法的实现放在头文件中。 这并不意味着你应该这样做。 它也与你所说的"接口"类这一事实无关。

顺便说一下,我不会称其为接口类,因为您的virtual方法不是纯粹的。