C++程序员是否模拟Java的功能?

Jic*_*hao 5 c++ java interface

正如我在Java中的Thinking中所读到的,

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

C++程序员是否真的熟悉java拥有的功能,例如接口和约束它们自己不会越过边界,例如在模拟接口中包含非静态最终(非常量)数据成员?

这些特性是Java为开发软件提供了自然的方式.那么,如果C++程序员可以,他们应该像Java程序员一样编码和思考?

编辑:我知道每个编程语言都有自己的特点,它的应用领域和编程语言的设计正在进行权衡.但我想知道的是java引入的例子界面是否是更好的方法来帮助/强制程序员思考彻底并产生良好的类设计?所以C++程序员想模拟其中的一些功能?

谢谢.

ito*_*son 34

这有点主观,但是:

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

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

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


duf*_*ymo 17

C++接口很简单:它们只是包含所有虚方法的类,包括虚拟默认析构函数.(感谢itowlson的纠正.)

  • 具体来说,接口是具有所有**纯**虚方法的类 - 尽管这是C++习惯用法更灵活的一个领域,因为你可以拥有一个实际上有一些成员实现的"接口"(比如Scala)特质),你不能用Java做. (3认同)

Gre*_*ill 14

您从以Java为中心的角度来看待这一点.例如,考虑Java不支持C++良好支持的"RAII"样式.语言不同,并以不同的方式支持不同的风格.


jal*_*alf 11

我不得不说"好"的Java设计几乎是一成不变的.在查看Java代码时,我从来没有见过如此多的代码重复,荒谬的分层抽象层次(但几乎从来没有在这种情况下实际上有意义的抽象).

Java没有很多与C++相同的优点.功能更清晰,更坚固,更优雅的设计.

C++程序员应该像C++程序员一样编写代码.有两个很好的理由:

  • 他们必须尊重语言的弱点和缺陷.当你不在时,试图假装你是一个垃圾收集的语言是灾难的食谱.并且试图在像C++这样的语言之上实现类似GC的语义可能更糟糕.
  • 同样重要的是,他们应该利用语言的每一种力量.当你可以获得零开销和复杂迭代器实现的真正通用集合类时,为什么在地球上你会扔掉它?如果你有一个单一的排序函数适用于任何容器,甚至更普遍,对于任何类型的任何对象序列,你为什么要扔掉它?

由于您提到接口作为C++程序员应该模拟的功能的示例,因此有两个重要的对立点:

  • C++具有抽象类形式的接口.语义略有不同,但它们可用于实现相同的目的.
  • C++并不需要接口为多,因为它具有模板和概念依赖于编译时鸭子类型.IIterator我们可以简单地定义"迭代器"的行为方式,并编写一个为成员提供相同名称的类,而不是让每个迭代器都来自一个接口.只要它"看起来像"一个迭代器,它就可以用作迭代器.模板元编程技巧甚至可以使现有的类能够"改进"它们以支持它们不是为其设计的概念.例如,原始指针(取自C)作为完全有效的迭代器工作,尽管缺少一些typedef成员.甚至没有首先上课.

当然,C++也有很多弱点.但它不仅仅是一种"劣等Java".这是一种不同的语言.有没有必要为C++程序员效仿Java功能.

正如我在Java中的Thinking中所读到的

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