为什么OO概念界面没有用C++中的关键字表示?

cas*_*der 7 c++ oop

Java等语言明确使用interface关键字来表示接口.使用Java之后,这个概念似乎足以让我证明一个关键字可以强制执行这个概念.

当然,可以使用纯虚拟类并将其标记为接口.但是,这个关键字似乎非常有用,并且与纯虚拟类不同,因此非常有用.也许它被包含在C++ 0x中?

Law*_*Dol 24

因为C++允许多重继承,并且因为接口是一个抽象类,其所有成员也是抽象/虚拟的,所以C++不需要它 - 类可以简单地"扩展"多个其他类,其中任何一个都可能是纯虚拟的(抽象).

另一方面,Java和C#不允许使用MI,因为这些语言的设计者认为MI会产生比解决的问题更多的问题.但是对象仍然需要"成为"许多东西(OOP是一种关系),所以接口提供了一种机制,允许对象成为很多东西,而不继承多个实现 - 保留宝宝,但扔掉了洗澡水.

  • 毫无疑问,一般来说,MI不会产生比解决问题更多的问题.事实上,许多OO语言都支持MI:CLOS,Eiffel,Python,OCaml等...... (2认同)

Cra*_*rks 17

这是多余的,因为接口通过让任何类成员都是纯虚拟(= 0)来表示.

  • -1,它不是任何班级成员,而是所有班级成员,所以答案是误导性的. (2认同)

Rob*_*b K 7

添加"interface"关键字会增加实现的复杂性,而无需添加任何真正有用的功能; 它会复制现有的功能.正如其他人所说,它只是一个纯粹的虚拟课程.Java和C#必须有"接口"才能获得C++已有的功能.从哲学上讲,C++旨在使程序员能够编写好的软件,而不是阻止程序员编写不良软件.根据我的经验,对抗MI的喧嚣被夸​​大了.白痴滥用它,就像他们滥用一切,而不是把白痴归咎于白痴,人们指责工具.


Dan*_*ker 2

C++ 的早期面向对象特性长期以来一直被忽视,因为它已经作为一种多范式语言朝着更有趣的方向发展。十多年来的主要焦点一直是模板及其含义,特别是在标准库中。是的,使用关键字程序会更具可读性interfaceoverride如果存在与new基类方法同名的方法修饰符(类似于 C#),它们也会更容易维护。但对于现代 C++ 用户以及那些为语言设计做出贡献的人来说,这些都不是有趣的问题。OO 功能足够了,但不是很好,并且几乎没有在标准库的“较新”(1992 年之后)部分中使用,这在某些方面可以作为良好风格的指南。