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

时间:2014-01-14 16:39:00

标签: c++

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

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

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

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

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

2 个答案:

答案 0 :(得分:4)

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

如果要在{.1}}类的.cpp中定义一些实现,那么你真的有更多的抽象类而不是接口。

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

答案 1 :(得分:0)

您可以将类方法的实现放在头文件中。这并不意味着你应该这样做。它也与这个“接口”类无关,就像你所说的那样。

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