【问题标题】:Is there a possibility that C++ multiple inheritance might be replaced with the Java interfaces? [closed]是否有可能将 C++ 多重继承替换为 Java 接口? [关闭]
【发布时间】:2014-09-12 17:43:29
【问题描述】:

我或多或少地同时研究了一点 Java 和 C++,我注意到 Java 对 OOP 的解释方式比 C++ 方式更友好、更直观。

是的,Java 完全是面向对象的,另一方面,C++ 支持许多范式,但这并不意味着 C++ 无法改进其实现面向对象范式的方式。

C++ 支持多重继承,Java 将其翻译为多重实现(接口),我觉得这非常直观和简单(我不认为这只是一种意见)。

我的第一个问题在标题中。我认为 C++ 会更友好,而不会失去几乎一点它的力量。这是一个改进一门非凡的编程语言的问题,但这并不完美。

我的第二个问题是:与Java编程语言的接口(如果有的话)相比,多重继承的优势是什么?

【问题讨论】:

  • 如果发生这种情况,很多代码会被破坏。
  • 没有人会阻止你在 C++ 中只使用抽象方法编写基类。
  • @bad_alloc:如果你想让你的语言为了你自己的利益而去掉一些特性,你真的应该使用 Java 而不是 C++。
  • 我当然同意 C++ 可以在没有多重继承的情况下完成,尽管它可以在这里和那里用于一些漂亮的技巧。这只是他们必须在早期选择的这些事情之一,现在,它不能也永远不会改变,因为太多的代码会破坏,你当然不能仅仅因为真正的意见而破坏所有的代码。顺便说一句,作为编码指南,许多“专业”项目都有一条关于不使用多重/虚拟继承的规则,以使事情变得更简单,就像在 Java 中一样。在 C++ 中,您决定在哪里画线。
  • 或者 C++,就此而言;重点是将垃圾收集添加到目前允许程序员显式管理内存的语言中。您正在谈论删除程序员有时依赖的功能,只是因为它是需要考虑的额外内容。限制功能以使事情变得更容易是高级语言的特征,但并非所有语言都是高级语言。有一个完整的范围。

标签: java c++ interface multiple-inheritance


【解决方案1】:

多重继承可能很危险,但它有时是解决问题的最合适的方法,并且已经编写了很多使用它的软件。从 C++ 中删除多重继承会破坏所有软件,而且修复起来并不简单。与现有代码兼容比“友好”更重要。

如果您想要 C++ 中 Java 接口的效果,只需编写一个只包含纯虚拟成员函数的类,并使用 virtual inheritance 从它派生以在另一个类中“实现”它。

Java 被设计为比 C++ 更高级和更简单的语言,它们之间的权衡与任何高级和低级语言之间的权衡相同。 Java 提供了更少的灵活性(例如,单一继承,对内存分配的控制很少),以换取更容易使用; C++ 提供了更多的功能和灵活性,但代价是必须更多地“知道你在做什么”。这些差异是可以的;无需将一种语言转换为另一种语言。

【讨论】:

  • 世界需要所有类型...
  • 我认为这个世界只需要一些近乎完美的类型。人们继续创建编程语言,有时并非出于真正有用的原因。
  • 没有一种语言可以完美,甚至几乎完美,适用于所有类型的程序。任何语言设计都涉及很多权衡。您听起来好像您认为 Java 可以解决所有问题,但事实并非如此。
【解决方案2】:
  1. 随着更新,C++ 变得越来越用户友好,变得越来越像 java,但它不需要更改太多以免破坏遗留代码。 Boost 库或多或少是 c++ 语言的先驱,它是(可能)有史以来最常用的库,并且对 c++ 采用了一种更简单、更直观的 OO 方法。 Boost 库中的功能通常最终会到达 STD。

  2. 让我们举个简单的例子:class manclass parent 有各自的功能 workcryclass dad 继承自 manparent。现在,当您编写继承自 class womanparentclass mom 时,您不必编写两次 cry

【讨论】:

  • 我不会说它对用户更友好,它只是有更多“东西”,否则需要外部库资源。恕我直言,与 C# 或 Java 相比,这就是 C++ 最糟糕的事情。这种关系是双向的; C++ 在 Java 之前就有 lambda。此外,您在 Java 中的简单示例同样简单,但请记住,男性和女性的 cry() 方式不同,因此无论哪种方式都是一种覆盖。
  • @Chief 多重继承的意义在于男女cry()虽然方式相同
  • 也许我很傻或很累,但你为什么会有crying 的关系。你从基类开始你的例子。可以是class human;所有人都会哭。您已经写了两次cry,将它包含在男人女人中。另外,我会在human 中使用enum sexgender var 并绕过意大利面条事件。我想不同的笔画。
【解决方案3】:

1.以显式方式进行多重继承似乎对用户更友好,但实际上并非如此。如果您这样做,将来会出现很多问题,我的意思是在您的项目中,例如,在不知情的情况下,您将一次又一次地将相同的代码添加到最终类中,这会使您的项目更加复杂并混淆解释器方法应该在适当的时候执行。

  1. 只要考虑在 C++ 中你有 A级 { 无效 display_a(){} } B类A类
    { void display_b(){}//这个类也包含'display_a()' } Class C A,B //多重继承。 { display_c(){} //这个类包含两次'display_a()'和一次'display_b()' }

所以类 a 包含两次'display_a()' 这是我们在 C++ 中的多重继承中遇到的问题,因此我们使用 Java 中的接口,它解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多