C++;程序员模拟Java的特性?

C++;程序员模拟Java的特性?,java,c++,interface,Java,C++,Interface,正如我在《java思考》中读到的 接口和内部类提供了更多 诡辩的组织和管理方法 控制图形中的对象 系统。例如,C++没有 包含这样的机制,尽管 聪明的程序员可以模拟它们 < C++ >程序员是否确实模仿java拥有的特性,例如接口和约束自身不跨越边界,例如在SIMULATION接口中包括非静态最终(非const)数据成员?< /P> 这些特性是java为开发软件提供了自然的方式。因此C++程序员可以像java程序员那样编写代码和思考? 编辑:我知道每种编程语言都有自己的特点和应用领域,编程语言的

正如我在《java思考》中读到的

接口和内部类提供了更多 诡辩的组织和管理方法 控制图形中的对象 系统。例如,C++没有 包含这样的机制,尽管 聪明的程序员可以模拟它们

< C++ >程序员是否确实模仿java拥有的特性,例如接口和约束自身不跨越边界,例如在SIMULATION接口中包括非静态最终(非const)数据成员?< /P> 这些特性是java为开发软件提供了自然的方式。因此C++程序员可以像java程序员那样编写代码和思考?

编辑:我知道每种编程语言都有自己的特点和应用领域,编程语言的设计正在权衡。但我想要的是什么 要知道,java是否引入了接口,是帮助C++程序员更好地思考和生成良好的类设计的方法吗?所以C++程序员想模拟这些特性吗?
谢谢。

C++接口很简单:它们只是包含所有纯虚拟方法的类,包括纯虚拟默认析构函数。(感谢伊托尔森的更正。)

这有点主观,但是:

<>如果C++程序员可以,他们应该 像Java程序员一样编码和思考

不,他们应该像C++程序员那样编码和思考。C++有很多在java中不存在的习惯用法和技巧(反之亦然)。你应该使用适合于语言的习惯用法和思维模式,而不是尝试用C++语法编写java(或PASCAL或FORTRAN)。
(当然,这并不意味着不要借用其他语言的技巧…!)

您是从以Java为中心的角度来看待这一点的。例如,java不支持C++所支持的“RAII”样式。语言不同,以不同的方式支持不同的风格。

这是一个相当主观的问题,但是,如果我同意我的观点,不,C/C++程序员不应该像“Java程序员”那样思考,Java程序员也不应该像“C/C++程序员”那样思考;每种语言都有一件事做得更好,而其他的事情都在进行中。然而,两者都应该像程序员一样思考,也应该像“面向对象的程序员”一样思考


面向对象分析使我们将世界视为对象及其方法、对它们进行分组的类、它们的公共接口等的集合。您的语言在描述这些结构的方式上可能有所不同,但最终目标是相同的。一旦您了解了要实现什么并选择了语言,那么您就开始考虑如何实现它,这与告诉您在“Java程序员”、“C/C++程序员”或“C#程序员”之间进行选择是一样的

> P>可能是C++和java之间最重要的区别是java有垃圾回收器,C++没有。这意味着,在C++中,无论何时在堆上创建对象,都需要知道以后如何清理。在Java中,只要知道垃圾收集器将对其删除进行排序,就可以安全地返回对象


<> P> >如果你像C++代码一样编写C++,你会有很多漏洞。

< P>有很多java特性,这些是java程序员难以复制的。接口和内部类不是其中之一,但是在java中编译器强制在接口中不能有代码,而C++中程序员只需要编写代码而不需要任何代码。在java内部类中,您有秘密的内置代码>父。这个字段,而C++嵌套类中,必须进行键入并使成员显式。C和C++都比java更具DIY。 因此,这取决于您认为该功能是什么。如果你认为java接口的特点是“我可以在设计中使用多态接口”,那么C++中就很简单了。如果你认为java接口特性“不能在接口中定义方法体”,C++就没有它。
如果您想精确地再现Java的特性,并“像Java程序员一样思考”,那么正确的做法是用Java编程…

C++有一个强大的概念(类+多重继承)来实现一系列目标。Java有两个功能较弱的概念(类+单继承和接口+多继承);如果将它们组合起来,您可以做一些C++可以做的事情,但不是所有的事情(例如,默认实现的接口)。所以说Java在这方面“更复杂”对我来说有点奇怪

更好的问题是:C++的附加功能是不是给了你一个好的东西?

< P>我不得不说“好”的java设计几乎是相当糟糕的。我从未见过如此多的代码重复,荒谬的分层抽象层次(但几乎从未见过在这种情况下真正有意义的抽象),就像看到Java代码一样

<> >有很多优秀的C++特性,java没有等价的。 使设计更干净、更坚固、更优雅的功能

<> C++程序员应该像C++程序员那样编写代码。有两个很好的理由: