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

hel*_*esk 70 c++ interface concept

可能重复:
在C++中模拟接口的首选方法

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

MD *_*med 108

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

一个示例示例是这样的 -

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;
}
Run Code Online (Sandbox Code Playgroud)

  • 您的示例具有_undefined behavior_,因为Interface没有虚拟析构函数. (8认同)
  • @CharlesBailey:好吧,我没有使用任何编译器,从记忆中写下来......可能这就是为什么我错过了很多东西...... (6认同)
  • ...虽然你的例子也不应该编译,因为你定义了Concrete :: method1和Concrete :: method2但是这些不是Concrete的有效成员而你是实例化Concrete虽然它仍然是抽象的. (2认同)
  • 来吧 2018 仍然没有 C++ 中的基本接口系统,f@# 的缘故,我讨厌除了 C++ 之外别无选择 (2认同)
  • @fdsfdsfdsfds C ++具有接口。C ++没有* keyword *接口。 (2认同)

Alo*_*ave 13

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


iam*_*ind 12

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

class InterfaceA
{
public:
  static const int X = 10;

  virtual void Foo() = 0;
  virtual int Get() const = 0;
  virtual inline ~InterfaceA() = 0;
};
InterfaceA::~InterfaceA () {}
Run Code Online (Sandbox Code Playgroud)

  • @barankin:内存泄漏与虚拟析构函数无关.它只是编写正确的C++. (4认同)
  • 虚拟析构函数呢? (2认同)
  • 我会添加一个虚拟 dtor 以避免将来可能出现的内存泄漏。 (2认同)
  • 在类定义中定义析构函数会更简单。你可以只做`virtual ~interfaceA() {}`。您的类已经是抽象的,因此通过使析构函数成为纯虚函数您不会获得任何好处。 (2认同)