我正在阅读一本关于多态性和接口的C ++书籍的在线摘录。 本书对多态性和接口进行了区分,并指定了如何在C ++中实现它们。但是,我一直认为C ++中的接口(使用带有纯虚函数的基类实现)只不过是多态的应用程序。 我想知道多态性和接口之间的明显区别,因为摘录让我很困惑。
答案 0 :(得分:6)
多态性是以统一方式处理多个类型的抽象概念,接口是实现该概念的一种方式。与接口交互的代码可以与提供该接口的任何类型进行交互。
请注意,C ++具有(至少)两种形式的多态性: dynamic (即运行时)多态性,通过虚拟函数正式定义的接口,以及 static (即编译时)多态性通过使用模板参数非正式定义的接口。
答案 1 :(得分:0)
典型的C ++接口利用虚函数和多态来提供实际的实现。但是多态性涵盖了许多其他东西,即“非接口”。
接口是一个基类,可用于传递回接受该接口的类的类。在某些情况下,一个类可能提供多个接口:
class MyClass: public InterfaceGUI, InterfaceAudio
{
....
};
这里,MyClass
提供了一个与GUI和Audio接口接口的类。这是多重继承的一种情况。
另一方面:
class Animal
{
int numLegs;
public:
Animal(int nLegs): numLegs(nLegs) {}
};
class Dog : public Animal
{
Dog() : Animal(4) { }
};
这里Animal
不是一个纯接口类,因为它实现了一些功能,这通常不是一个很好的接口设计。
答案 2 :(得分:0)
我从polymorphism
和Interface
的概念中理解的内容如下:
Polymorphism
只不过是有一种形式(按照所有书籍)。
但是当你将它与现实生活联系起来时,按照对象的定位你将会知道Polymorphism
只不过是拥有多个具有相同名称或其他质量的形式,但拥有自己的专利质量,没有人拥有。
根据编程:
具有相同名称的函数但不同的参数(编译时多态性)和用于运行时多态性的虚函数如解释here 接口描述了C ++类的行为或功能,而没有提交给该类的特定实现。
C ++接口是使用抽象类实现的,这些抽象类不应与数据抽象混淆,数据抽象是将实现细节与关联数据分开的概念。
为此,我们使用Pure Virtual function
如需参考,您可以查看此Link
例如,您可以使用Mats Petersson
的解释希望这能帮助您理解基本的术语。