【问题标题】:Interface as in java in c++? [duplicate]c++中的java接口? [复制]
【发布时间】:2011-10-13 10:55:29
【问题描述】:

可能重复:
How do you declare an interface in C++?

有人问我一个问题:“在 C++ 中没有像 java 中那样的接口。但是如果你可以在 C++ 中实现它们,你会怎么做呢?”

怎么样?我会用虚拟方法创建一个类。这看起来像 java 中的接口还是?

谢谢

【问题讨论】:

  • Java 使用接口作为一个穷人的替代品来代替多重继承(这在 Java 中是被禁止的)。 C++ 完全支持多重继承。它不需要 Java 风格的接口。
  • @close-voters:所谓的重复不是。尚未给出关于如何在 C++ 中进行类 Java 接口实现继承的答案。这一点都不难,但这是对 this 问题的任何回答的基本要素(对于所谓的重复问题则不然)。

标签: java c++ interface


【解决方案1】:

C++ 中的接口是abstract base class——一个不能被实例化的接口。与 java 接口不同,它们实际上可以有部分实现和成员变量。

【讨论】:

  • 值得注意的是,您也可以在 Java 中创建抽象类。 :-)
  • 就是我所说的。具有虚拟方法的类 = 抽象类还是?
  • Java 接口的模拟是一个 C++ 类,它的所有方法都是纯虚拟的。它没有实现,但会规定一组必须由某个派生类实现的函数。
  • @JeffPaquette "它的所有方法都是纯虚拟的。" 除了析构函数,它不需要是纯的,当然必须实现。
  • @curiousguy 如果析构函数不是纯虚拟的,它就不是一个完全接口,因为它提供了实现 /nitpick-pick
【解决方案2】:

您可以使用多重继承在 C++ 中创建接口。

您创建一个纯虚拟的基类(所有函数 =0),然后您的类从它继承。

多重继承意味着您可以从其中任意多个继承。

// Interface definition
class ISomethingable
{
public:
    virtual ~ISomethingable() {}
    virtual void DoSomething() = 0;    
}

// Your code
class MyClass : public ISomethingable
{
public:
    void DoSomething()
    {
         // Do something concrete.
    }
}

另请参阅:How do you declare an interface in C++?

【讨论】:

  • 那里,您现在可以投票关闭作为副本。
【解决方案3】:

是的,只需创建一个没有成员变量和纯虚函数的类。

【讨论】:

    猜你喜欢
    • 2012-08-10
    • 1970-01-01
    • 2014-04-30
    • 2019-01-24
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 2016-12-27
    • 2012-12-11
    相关资源
    最近更新 更多