首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++程序员是否模拟Java的特性?

C++程序员是否模拟Java的特性?
EN

Stack Overflow用户
提问于 2009-12-23 19:30:32
回答 9查看 795关注 0票数 5

当我读到用java思考的时候,

接口和内部类提供了更多灵活的方法来组织和控制系统中的对象。例如,C++不包含这样的机制,尽管聪明的程序员可能会模拟它们。

C++程序员是否确实拥有java所拥有的特性,例如接口和约束自己不跨越边界,例如在模拟的接口中包括非静态的最终(非const)数据成员?

这些特性是Java为开发software.So提供的自然方式吗?如果C++程序员可以的话,他们应该像一个C++程序员那样编写代码和思考吗?

编辑:我知道每个编程语言都有自己的特点和应用领域,而编程语言的设计正在使tradeoffs.But成为,我想知道的是,java引入的接口是否更好地帮助/迫使程序员进行深入思考并产生良好的类设计?那么C++程序员想要模拟其中的一些特性吗?

谢谢。

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2009-12-23 20:53:18

我不得不说,“好的”Java设计几乎都是糟糕的。在查看Java代码时,我从未见过如此多的代码复制、荒谬的分层抽象级别(但几乎从未见过在这种情况下真正有意义的抽象)。

C++有许多优秀的特性,这是Java所无法比拟的。功能,使更干净,更健壮和更优雅的设计。

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

  • ,他们必须尊重语言的弱点和缺陷。当你不使用垃圾收集的语言时,试图假装自己是垃圾收集的语言,这是灾难的秘诀。在像C++这样的语言之上尝试实现类似GC的语义可能更糟糕,
  • 和同样重要的是,他们应该利用这种语言的所有优势。当您可以获得真正的泛型集合类,具有零开销和复杂的迭代器实现时,为什么要丢弃它呢?如果有一个对任何容器都有效的排序函数,甚至对于任何类型的对象序列,为什么要丢弃它呢?

由于您提到接口是C++程序员应该模仿的特性的一个示例,因此有两个重要的对应点:

  • C++具有抽象类形式的接口。语义略有不同,但它们可以用于相同的目的。
  • C++不那么需要接口,因为它有依赖于编译时鸭子类型的模板和概念。与其让每个迭代器从IIterator接口派生出来,我们还可以简单地定义一个“迭代器”应该如何运行,并编写一个为成员提供相同名称的类。只要它“看起来像”迭代器,它就可以用作迭代器。模板元编程技巧甚至可以调整现有的类以“改造”它们,以支持它们不是为其设计的概念。例如,尽管缺少几个typedef成员,但原始指针(取自C)作为完全有效的迭代器工作。甚至一开始都不是类。

当然,C++也有很多弱点。但它并不是一个简单的“劣等Java”。这是一种不同的语言。C++程序员不需要模仿Java特性。

,正如我在用java阅读的Thinking中所看到的

Java书籍很少是有关C++的良好信息来源。;)

票数 11
EN

Stack Overflow用户

发布于 2009-12-23 19:33:51

这有点主观,但是:

如果C++程序员可以的话,他们应该像一个C++程序员那样编码和思考吗?

不是的。他们应该像C++程序员那样编码和思考。C++有许多在Java中不存在的习惯用法和技术(反之亦然)。您应该使用与语言相适应的习惯用法和思维模式,而不是尝试用C++语法编写Java (或Pascal或Fortran)。

(当然,这并不意味着不要借用其他语言的技巧.!)

票数 34
EN

Stack Overflow用户

发布于 2009-12-23 19:33:32

C++接口很简单:它们只是包含所有纯虚拟方法的类,包括一个纯虚拟默认析构函数。(多亏了itowlson的修正。)

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

https://stackoverflow.com/questions/1954853

复制
相关文章

相似问题

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