As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center提供指导。




11年前关闭。




正如我在《用Java思考》中所读到的,



C++程序员模拟Java拥有的功能是真的吗?界面并约束自己不要越过边界,例如包括在模拟接口(interface)内的非静态最终(非常量)数据成员?

Java是否为开发软件提供了自然的方式?因此,如果C++程序员可以,他们应该像Java程序员一样进行编码和思考吗?

编辑:我知道每种编程语言都有其自身的特点和应用领域,并且编程语言的设计正在权衡取舍。但是我想要的是
知道java引入的接口(interface)界面是否是更好的方法来帮助/强制程序员进行全面思考并产生良好的类设计?C++程序员想模拟其中的某些功能吗?

谢谢。

最佳答案

我不得不说“好的” Java设计几乎一向是可怕的。我从来没有见过像查看Java代码时那么多的代码重复,荒谬的抽象层次(但几乎从来没有在这种情况下实际上有意义的抽象)。

C++具有Java所没有的许多好功能。
可以实现更清洁,更坚固和更优雅的设计的功能。

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

  • 他们必须尊重语言的弱点和缺点。试图假装自己不是垃圾收集的语言,这就是灾难的根源。试图在像C++这样的语言上实现类似于GC的语义可能会更糟。
  • 同样重要的是,他们应该利用语言的所有优势。当您可以获得零开销和复杂的迭代器实现的真正通用集合类时,为什么要扔掉它呢?当您拥有一个适用于任何容器,甚至更一般而言,适用于任何类型的任何对象序列的单个排序功能时,为什么要扔掉它呢?

  • 由于您将接口(interface)作为C++程序员应模仿的功能的示例进行了提及,因此有两个重要的对立点:
  • C++具有抽象类形式的接口(interface)。语义略有不同,但是可以用于相同的目的。
  • C++不需要太多接口(interface),因为它具有依赖于编译时直接输入的模板和概念。不必让每个迭代器都从IIterator接口(interface)派生,我们可以简单地定义“迭代器”的行为方式,并编写一个为成员提供相同名称的类。只要它看起来像迭代器,就可以用作迭代器。模板元编程技巧甚至使适应现有的类以“改型”它们以支持并非为它们设计的概念成为可能。例如,尽管缺少一些typedef成员,但原始指针(取自C)可以用作完全有效的迭代器。甚至根本不用上课。

  • 当然,C++也有很多缺点。但这不仅仅是一个“劣等的Java”。这是另一种语言。 C++程序员无需模仿Java功能。



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

    10-08 09:16
    查看更多