接口和class有什么区别?

What is the difference between interface and class?

在 C++ 中,我可以进行 interfaceclass 声明。但是,与 C# 相比,这里的 interface 很可能是 class 那么为什么它在那里?

interface Interface {

};

class Class {

};

如评论中所述,标准 C++ 不直接支持 "interface" 构造。这是一些供应商的扩展。

其他语言也是如此(例如 Java)。

标准 C++ 中的等效项是抽象基 class,它没有数据成员。

class SomeInterface
{
    public:
        virtual ~SomeInterface() = 0;
        virtual void SomeAction(int flag) = 0;
};

从这样的class继承强制派生class到override/implement所有虚函数,否则无法实例化。

一般来说,没有数据成员的抽象基 class 通常可以在没有非平凡构造函数的情况下逃脱(因为 class 没有要初始化的成员)。

与支持接口构造的其他语言不同,抽象基础 class 允许;

  • 在基 class 中有数据成员。 (在这种情况下,可能需要定义构造函数、析构函数、赋值运算符等来管理这些成员)
  • 有些成员是纯虚拟的,有些不是
  • 提供纯虚方法的实现(派生class必须显式覆盖,但可以调用基础class版本)