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


Where to put an interface class in c++

我对C++编程很陌生,并且努力组织我的项目。我有一个名为StateManager的类,它有一个头文件和一个cpp文件。cpp包含所有实现。

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

1
2
3
4
5
6
class IStateManager
{
    public:
        virtual ~IStateManager() {}  
        virtual void SomeMethod {}
};

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

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


从技术上讲,C++没有接口。但是,可以通过多个继承来"创建"接口(或者,如果您的类是一个"基础"类,并且不需要从多个类继承,则可以通过单个继承来"创建"接口)。你生活的"界面"完全取决于你自己。但是,如果计划使用类作为接口(没有任何实际实现,因为从技术上讲,在子类中定义函数之前,接口没有实现),我将把它放在自己的头文件中,并声明每个函数都是纯虚拟的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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
    //..
};

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

所以最后我要说的是:"interface"的任何实现都应该在其实现类的.cpp文件中定义。如果你打算在多个文件中使用这个接口,我会为它创建一个单独的.h文件。


您可以将类方法的实现放在头文件中。这并不意味着你应该。它也与这个您称之为"接口"类的事实无关。

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