【问题标题】:Why does struct design to be expanded leading it much like class?为什么要扩展的结构设计很像类?
【发布时间】:2016-06-16 09:27:14
【问题描述】:

在过去,换句话说,在 C 时代,struct 没有构造函数、析构函数等。但是,现在(C++ 时代),struct 已经扩展得更像类。

那么,C++ 设计者的目的是什么?

详细来说,为什么要在struct中加入构造函数、析构函数、继承、成员函数?

这不是对C/C++ Struct vs Class 的重复问题,因为这里的重点在于设计目的,而不是结构和类之间的区别。

它也不与Why do both struct and class exist in C++?重复,我看不到上述问题下扩展结构的目的。

【问题讨论】:

  • 没有充分的理由同时拥有structclass。想必class是为了OO酷而添加的。
  • @ecatmur 我在该问题中没有看到任何解释为什么“类”与“结构”并存。
  • 相关,可能触及到这个问题的答案:stackoverflow.com/questions/34906229/…

标签: c++ c


【解决方案1】:

让我们探索其他可能的设计选项,由 juanchopanza 在 cmets 中列举。

删除struct

此选项的一个优点是更少的混乱和不存在这样的问题。

一个缺点是与 C 的严重不兼容,我相信与 C 的兼容性曾经是并且仍然是 C++ 的设计目标之一。

不要介绍class

我认为这只是指新关键字的引入。另一种解释见 cmets。

一个优点是同一事物的两个名称引起的混淆更少。

缺点是与common object oriented terminology 不匹配。

使struct 与 C 中的含义相同

Stoustrup 的引用来自:http://www.drdobbs.com/c-theory-and-practice/184403384

原引自:Bjarne Stroustrup。 C++ 的设计和演变(Addison-Wesley,1994 年)。

也许我们可以接受两组规则,但一个概念可以提供更顺畅的功能集成和更简单的实现。我确信,如果 struct 对用户意味着“C 和兼容性”,而 class 意味着“C++ 和高级特性”,那么社区将分成两个不同的阵营,很快就会停止交流……只有一个概念可以支持我的从“传统的 C 风格编程”通过数据抽象到面向对象编程的平稳过渡的想法。只有一个概念可以支持“您只需为使用的东西付费”的理想概念。

他后来补充说:

我认为保持 struct 和 class 相同概念的想法使我们免于支持我们现在拥有的昂贵、多样化且完全不同的一组功能的类。换句话说,“结构就是类”的概念阻止了 C++ 发展成为一种具有不连贯的低级子集的高级语言。”

【讨论】:

  • 那句话是断章取义的。它来自第 3 章第 76 页,在此之前它说:“那为什么我此时不选择使结构和类具有不同的概念呢?我的意图是有一个概念:一组布局规则,.. . 等等 [原文如此]"
  • @uhohsomebodyneedsapupper 但原始上下文是否与此不同(我没有这本书)?这不正是我们在这里推测的吗? 设计决定结构和类相同的原因是什么,而不是让结构是 C 结构,而类是这个新事物。 我认为这句话似乎很自给自足,但是如果您认为这是值得的,那么我将不胜感激将前一段添加到引用中。
  • 我认为您对don't introduce class 选项的考虑还有一些不足之处。如果你根本不引入类,即没有构造函数和析构函数,这意味着没有 RAII,并且可能也没有例外——C++ 将是完全不同的东西。正如我们今天所知道的,甚至是我们在 1995 年所知道的,类是 C++ 的一个基本特性。
  • @ChrisBeck 在这里,我认为“不引入类”意味着结构将被设计成现在的样子 - 带有构造函数和析构函数 - 并且简单不会引入新的关键字,并且类的概念将具有不同的名称 - 结构。我什至没有想到会完全忽略基本 OOP 功能的设计,因为这与 C++ 完全不同。
  • 啊,我明白了。现在更有意义了。
猜你喜欢
  • 2013-08-02
  • 1970-01-01
  • 2019-05-23
  • 1970-01-01
  • 1970-01-01
  • 2016-10-25
  • 2013-09-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多