繁体   English   中英

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

[英]Where to put an interface class in c++

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

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

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
    //..
};

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM