什么是不在Java中的OOP功能但c ++具有这些功能?

时间:2010-02-01 07:06:55

标签: java c++

尊重先生!

由于我还没有学过Java,但是大多数人都说C ++比Java有更多的OOP功能,我想知道c ++有什么功能,java没有。请解释一下。

7 个答案:

答案 0 :(得分:6)

来自java.sun.com

  

Java省略了许多很少使用,知之甚少,令人困惑的C ++功能,这些功能在我们的经验中带来了更多的悲伤而不是利益。这些省略的特性主要包括运算符重载(尽管Java语言确实有方法重载),多重继承和广泛的自动强制。

如需更详细的比较,请查看此Wikipedia page

答案 1 :(得分:5)

这可能是有争议的,但是一些作者说使用自由函数可能比为一切编写方法更面向对象。因此,根据这些作者的观点,C ++中的自由函数使其比Java更具OO(没有它)。

解释是,某些操作并未真正执行 on 对象的实例,而是在外部执行,并且对这些情况进行外部定义的操作可以改进OO设计。一些情况是对两个对象的操作,这两个对象自然不是任何一个对象的操作。增加值显然是对值的操作,但是创建一个具有两个其他(或连接)之和的新值并不是实例上的操作。当你写:

String a = "Hello";
String b = " World";
String c = a.append( b );

append操作未在a上执行:操作a仍为“Hello”后。该操作也不在b上执行,它是在ab上执行的外部操作。在这个特定的例子中,实现操作的最OO方式是提供一个带有两个参数的新构造函数(毕竟,操作是在 new 字符串上执行的),但另一个解决方案是提供一个外部函数append,它接受​​两个字符串并返回第三个字符串。

在这种情况下,当两个实例属于同一类型时,操作自然可以作为该类型的静态方法执行,但是当您混合使用不同类型时,操作实际上不是任何一个的一部分,在某些情况下它可能最终会成为完全不同的类型。在某些情况下,自由函数在Java中就像在Collections java类中一样伪造,它不代表任何OO元素,但是绑定自由函数的相当简单的粘合剂是静态方法,因为该语言不支持前者。请注意,所有这些算法都不在集合上执行,也不在包含类型的实例上执行。

答案 2 :(得分:4)

C ++是一种庞大的语言,C ++开发人员在开发过程中只使用一小部分是很常见的。这些语言特性通常被认为是C ++中最难掌握和最困难的部分,并且经常被避免。

答案 3 :(得分:1)

在C ++中,您可以绕过OO模型并组成自己的东西,而在Java中,VM决定您不能。很简单,但你知道......谁有时间。

答案 4 :(得分:1)

我想有些人会考虑运算符重载面向对象的特性(如果你查看的二元运算符与类方法差别不大)。

答案 5 :(得分:1)

一些链接,给出了一些好的答案:

答案 6 :(得分:1)

小心点。 OOP有多种定义。例如,Wegner 87和Booch等91中的定义与人们在Java is not pure a OOP language中所说的不同。

所有这些“我的语言比你的语言更多OO”的东西有点无意义,IMO。