接口和class有什么区别?
What is the difference between interface and class?
在 C++ 中,我可以进行 interface
和 class
声明。但是,与 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版本)
在 C++ 中,我可以进行 interface
和 class
声明。但是,与 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版本)