2014-01-14 107 views
4

我是新来的编程在c + +和组织我的项目斗争。 我有一个名为StateManager的类,它有一个头文件和一个cpp文件。 cpp包含所有实现。在哪里把接口类在c + +

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

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

我知道接口并不真正存在,因为他们在C#或Java做的,但我想多类从这个“接口”继承。

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

+1

接口应该只需要标题,因为它没有实现。它可以自己进入头部,也可以放在另一个更大的头文件中。 (这里没有像Java这样的限制) – 2014-01-14 16:41:01

+1

@ebyrob:这些方法没有被声明为纯虚拟。 –

+0

C++编译器不编译头文件。编译单元始终是CPP文件。如果您的头文件(因为它是_interface_)将被cpp包含在某处,那么您不需要一个空的cpp文件。这就是说,如果yuo're谈论接口...我会让这些方法是纯粹的(而不是空的实现)。 –

回答

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

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

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

0

您可以在头文件中放置类方法的实现。这并不意味着你应该。这与您称之为“界面”类的事实无关。

我不会称之为接口类,因为你的方法不是纯粹的。

+0

我知道接口并不像他们在c#或Java中那样存在,但我想要多个类从这个“接口”继承。所以我希望它与其他文件隔离或我错过了你的观点? –

+2

我当然不会创建一个.cpp文件来存储一组空花括号'{}'。 (虽然“我应该如何在C++中创建一个接口”当然是一个相关的问题,并没有直接提出) – 2014-01-14 16:44:17