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

Zia*_*man 1 c++ java

尊敬的先生!

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

Cor*_*rey 6

来自java.sun.com

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

有关更详细的比较,请查看此Wikipedia页面.

  • @Josh:如果被初学者驱动程序滥用,某些C++功能被认为是不好的.我们这些拥有所有功能的高级驾驶执照并且不滥用它们的人(因为我们可能已经学会了为什么它很糟糕). (2认同)

Dav*_*eas 5

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

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

String a = "Hello";
String b = " World";
String c = a.append( b );
Run Code Online (Sandbox Code Playgroud)

append不执行对操作a:手术后a仍是"你好".未执行的操作b或者,它是在两个进行的外部操作ab.在这个特定的例子中,实现操作的最OO方式是提供一个带有两个参数的新构造函数(毕竟,对字符串执行操作),但另一个解决方案是提供一个带有append两个字符串的外部函数并返回第三个.

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

  • 您可以阅读DDJ中关于"非成员函数如何改进封装"的文章http://www.ddj.com/cpp/184401197 (2认同)