如何在C ++中声明接口

时间:2013-12-08 17:47:28

标签: c++ interface

我想做2个类,第一个是接口,应该在头文件中,第二个类是cpp文件,应该包括接口的实现。 我的意思是如果我声明一个头文件:LinkedList.h

class LinkedList{
public:
   some methods...
private:
};

我想在C ++中实现这个linkedList类,我的问题是怎样的? 这种语法合法吗? (接口和实现具有相同的名称。)

#include "LinkedList.h"
class LinkedList : public LinkedList{
   implementation of the header file...
}

2 个答案:

答案 0 :(得分:1)

语法不合法,因为class拼写为小写。

如果用“interface”表示它在Java中的含义,那么不,C ++没有等价物(最接近的是具有所有纯virtual方法的类)。

如果你的意思是“类的定义”,那么是的,关闭你是怎么做的。您只需在实现文件中不需要额外的class ...,就可以将方法实现为:

 void LinkedList::method1()
 {
 }

答案 1 :(得分:0)

  

这种语法合法吗?

没有!使用class关键字引入所有类声明的拳头(如 Luchian Grigore提到)。实现的语法是:

#include "LinkedList.h"

void LinkedList::MyMethod()
{
    // Your implementation ...
}

注意:
你描述的只是一个简单的类声明和它的实现(定义)。如果你真的想要一个 抽象界面 ,那就不一样了。
在C ++中声明接口的最常用方法是提供纯抽象类:

<强> ILinkedList.h

struct ILinkedList
{
    virtual void addItem(Node& item) = 0;
    // more methods ...
    virtual ~ILinkedList() {}
};

然后将此包含在接口的实现声明中:

<强> LinkedList.h

#include "ILinkedList.h"
class LinkedList : public ILinkedList {
public:
    virtual void addItem(Node& item);
};

...并且有一个实现(定义):

<强> LinkedList.cpp

#include "LinkedList.h"

void LinkedList::addItem(Node& item)
{
    // Your implementation ...
}