为什么OO概念接口在C ++中没有用关键字表示?

时间:2009-01-26 02:51:01

标签: c++ oop

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

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

8 个答案:

答案 0 :(得分:24)

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

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

答案 1 :(得分:17)

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

答案 2 :(得分:7)

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

答案 3 :(得分:4)

因为界面严重弱于MI。

答案 4 :(得分:2)

接口出现在没有多重继承的语言中,以部分覆盖它。 C ++已经具有多重继承,因此它不需要它。

此外,并非所有语言都必须相同。 C ++有自己的设计和历史,有其优点和缺点,就像Java,C#等等。尝试使所有语言都相同是没有用的。

答案 5 :(得分:2)

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

答案 6 :(得分:0)

这是一个short article from DDJ,涉及类和接口之间的区别。

答案 7 :(得分:0)

实际上,“接口”OO概念是对象可以执行的操作。

因此,Ruby或Python等语言也有“接口”,尽管它们不需要像在Java中那样声明它们。

在Java中,接口OO概念与此“interface”关键字匹配,该关键字用于声明对象将响应某个合同(许多方法)

C ++也有这个概念,甚至每个没有实现任何接口的Java对象。