首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有哪些面向对象的特性没有出现在java中,但是c++有这些特性?

有哪些面向对象的特性没有出现在java中,但是c++有这些特性?
EN

Stack Overflow用户
提问于 2010-02-01 15:06:55
回答 7查看 1.6K关注 0票数 1

尊敬的先生!

因为我还没有学过Java,但是大多数人说C++比java有更多的OOP特性,所以我想知道c++有哪些特性,java没有哪些特性,请解释一下。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-02-01 16:27:06

这可能会引起争议,但一些作者说,使用自由函数可能更多地是面向对象的,而不是编写所有东西的方法。因此,根据作者的观点,C++中的自由函数使其比Java语言(没有它们)更面向对象。

解释是,有一些操作并不是真正在对象的实例上执行的,而是在外部执行的,并且对于这些情况具有外部定义的操作可以改进OO设计。有些情况是对两个对象的操作,而这两个对象本身都不是任何一个对象的操作。递增一个值显然是一个对值的操作,但是用另外两个值的和创建一个新值(或连接)并不是对实例的真正操作。当你写的时候:

代码语言:javascript
复制
String a = "Hello";
String b = " World";
String c = a.append( b );

append操作不会在a上执行:操作完成后,a仍然是"Hello“。该操作也不是在b上执行的,它是在ab上执行的外部操作。在这个特定的示例中,实现操作的最面向对象的方法是提供一个接受两个参数的新构造函数(毕竟,操作是在新字符串上执行的),但是另一个解决方案是提供一个接受两个字符串并返回第三个字符串的外部函数append

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

票数 5
EN

Stack Overflow用户

发布于 2010-02-01 15:16:08

来自java.sun.com

Java省略了C++的许多很少使用、很少被理解、令人困惑的特性,在我们的经验中,这些特性带来的痛苦多于好处。这些被省略的特性主要包括操作符重载(尽管Java语言确实有方法重载)、多重继承和广泛的自动强制。

有关更详细的比较,请查看此Wikipedia page

票数 6
EN

Stack Overflow用户

发布于 2010-02-01 15:11:55

  • Multiple inheritance
  • Template Metaprogramming

C++是一种庞大的语言,对于C++开发人员来说,在开发过程中只使用很小的子集是很常见的。这些语言特性经常被认为是C++中最危险/最难掌握的部分,通常会被回避。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2175189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档