【发布时间】:2018-07-04 21:18:09
【问题描述】:
我对 C++ 中的接口有一些疑问。
据我了解,如果您想使用基类来处理您已经想到的某些任务,并且为此声明了一些方法(但没有定义),则可以使用它们。但是每个派生类都需要为它们的特定目的实现这些方法,因此您可以将它们创建为抽象方法。 抽象类和接口之间的唯一区别是,抽象类至少有一个纯虚方法,而且一些“普通”方法和接口只有纯虚方法。对吗?
我的教授将接口描述为两个类相互通信的一种方式。例如。一个接口用于网络类,一个接口用于分析来自该网络的信息的分析器类。但是为什么我需要一个接口呢?我不能只使用普通类而不是从接口派生的类吗?他说,为了从另一个类中提取信息,您需要有一个接口派生类。在这里使用接口有什么好处吗?
我希望我的问题很清楚,英语不是我的第一语言。
编辑: 抽象类:(1/3的方法是纯虚的)
class MyAbstractClass {
public:
virtual ~MyAbstractClass() {}
virtual void Method1();
virtual void Method2();
virtual void Method3() = 0;
};
接口:(所有方法都是纯虚的)
class MyInterface {
public:
virtual ~MyInterface() {}
virtual void Method1() = 0;
virtual void Method2() = 0;
};
【问题讨论】:
-
一个定义良好的接口通常很不错,这样您就可以透明地更改实现细节。尽管您不需要使用抽象类甚至继承。例如,标准容器通过提供类似的成员函数就拥有一个没有继承的统一接口,这使得它们大多可以互换。
-
请注意,“接口”是一个在编程世界中具有大量含义的词。仔细检查您使用的是同一个。
-
@manni66 - 虽然 C++ 中没有语言构造“命名”接口,但纯虚拟类是完全等价的。
-
不要将 Java 术语“interface”与英文单词“interface”混淆。
-
另一种语言注释:不要将作为接口(或“抽象类”)与拥有或暴露 i> 一个界面。
标签: c++ abstract-class