接口和多态之间的区别

时间:2014-01-28 07:35:17

标签: c++ oop interface polymorphism

我正在阅读一本关于多态性和接口的C ++书籍的在线摘录。 本书对多态性和接口进行了区分,并指定了如何在C ++中实现它们。但是,我一直认为C ++中的接口(使用带有纯虚函数的基类实现)只不过是多态的应用程序。 我想知道多态性和接口之间的明显区别,因为摘录让我很困惑。

3 个答案:

答案 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)

我从polymorphismInterface的概念中理解的内容如下:

  1. 多态性:  Polymorphism只不过是有一种形式(按照所有书籍)。  但是当你将它与现实生活联系起来时,按照对象的定位你将会知道Polymorphism只不过是拥有多个具有相同名称或其他质量的形式,但拥有自己的专利质量,没有人拥有。 根据编程: 具有相同名称的函数但不同的参数(编译时多态性)和用于运行时多态性的虚函数如解释here
  2. Check this Example

    1. 接口
    2. 接口描述了C ++类的行为或功能,而没有提交给该类的特定实现。

      C ++接口是使用抽象类实现的,这些抽象类不应与数据抽象混淆,数据抽象是将实现细节与关联数据分开的概念。

      为此,我们使用Pure Virtual function 如需参考,您可以查看此Link

      例如,您可以使用Mats Petersson

      的解释

      希望这能帮助您理解基本的术语。