如何实现C++中的接口?

how to implement Interfaces in C++?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Preferred way to simulate interfaces in C++

我很想知道C++中是否有接口,因为在Java中,设计模式的实现主要是通过接口去耦类。在C++中有类似的接口创建方法吗?


C++没有内置的接口概念。您可以使用只包含纯虚拟函数的抽象类来实现它。因为它允许多重继承,所以您可以继承这个类来创建另一个类,然后在其中包含这个接口(我的意思是,对象接口:)。

示例如下-

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
class Interface
{
public:
    Interface(){}
    virtual ~Interface(){}
    virtual void method1() = 0;    //"= 0" part makes this method pure virtual, and
                                   // also makes this class abstract.
    virtual void method2() = 0;
};

class Concrete : public Interface
{
private:
    int myMember;

public:
    Concrete(){}
    ~Concrete(){}
    void method1();
    void method2();
};

// Provide implementation for the first method
void Concrete::method1()
{
    // Your implementation
}

// Provide implementation for the second method
void Concrete::method2()
{
    // Your implementation
}

int main(void)
{
    Interface *f = new Concrete();

    f->method1();
    f->method2();

    delete f;

    return 0;
}


C++中没有接口概念,可以使用抽象类模拟行为。抽象类是至少有一个纯虚拟函数的类,不能创建抽象类的任何实例,但可以创建指向它的指针和引用。此外,从抽象类继承的每个类必须实现纯虚拟函数,以便可以创建其实例。


接口只不过是C++中的一个纯抽象类。理想情况下,此接口class只应包含纯virtual公共方法和static const数据。例如:

1
2
3
4
5
6
7
8
9
10
class InterfaceA
{
public:
  static const int X = 10;

  virtual void Foo() = 0;
  virtual int Get() const = 0;
  virtual inline ~InterfaceA() = 0;
};
InterfaceA::~InterfaceA () {}