接口和类有什么区别?

时间:2015-02-01 19:29:41

标签: class interface c++-cli

在C ++中,我可以进行interfaceclass声明。但是,与C#相比,这里的interface很可能是一个类,为什么会出现呢?

interface Interface {

};

并且

class Class {

};

1 个答案:

答案 0 :(得分:2)

正如评论中所提到的,标准C ++不支持"接口"直接构建。这是一些供应商的扩展。

其他语言(例如Java)。

标准C ++中的等价物是一个抽象基类,它没有数据成员。

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

继承自这样的类会强制派生类覆盖/实现所有虚函数,否则无法实例化它们。

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

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

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