Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么结构设计要像类一样扩展?_C++_C - Fatal编程技术网

C++ 为什么结构设计要像类一样扩展?

C++ 为什么结构设计要像类一样扩展?,c++,c,C++,C,在过去,换句话说,当涉及到C时代时,结构没有构造函数、析构函数等。然而,现在(C++时代),结构被扩展得更像类 < > C++设计者打算做什么?< /P> 具体来说,与c相比,为什么要在结构中添加构造函数、析构函数、继承和成员函数 这不是一个重复的问题,因为这里的要点在于设计目的,而不是结构和类之间的区别 这也不是重复,我看不出在上面的问题下扩展struct的目的。让我们探讨其他可能的设计选项,juanchopanza在评论中列举了这些选项 删除struct 这种选择的一个优点是较少的混乱和不存

在过去,换句话说,当涉及到C时代时,结构没有构造函数、析构函数等。然而,现在(C++时代),结构被扩展得更像类

< > C++设计者打算做什么?< /P> 具体来说,与c相比,为什么要在结构中添加构造函数、析构函数、继承和成员函数

这不是一个重复的问题,因为这里的要点在于设计目的,而不是结构和类之间的区别


这也不是重复,我看不出在上面的问题下扩展struct的目的。

让我们探讨其他可能的设计选项,juanchopanza在评论中列举了这些选项

删除
struct

这种选择的一个优点是较少的混乱和不存在这样的问题

一个缺点是C与C的兼容性不高,我认为C的兼容性是C++的设计目标之一。 不要介绍

我认为这仅仅是介绍了新的关键词。另一种解释见注释

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

缺点是不匹配

使
struct
与C中的意思相同

Stoustrup的引述自:

最初引自:比亚恩·斯特罗斯图普。C++(Addison Wesley,1994).</P>的设计与演化 也许我们可以使用两套规则,但一个概念提供了更平滑的功能集成和更简单的实现。我确信,如果struct对用户来说意味着“C和兼容性”,class则意味着“C++和高级功能”,那么社区将分成两个截然不同的阵营,很快就会停止交流。。。只有一个概念可以支持我的想法,即通过数据抽象,从“传统的C风格编程”平稳渐进地过渡到面向对象编程。只有一个概念支持“你只为你使用的东西付费”的理想

他后来补充说:

我认为将struct和class保持在同一个概念上的想法使我们不必像现在这样支持昂贵的、多样的、完全不同的特性集的类。换言之,“结构是一个类”的概念是阻止C++从一个断开的低级子集迁移到更高级语言的原因。
没有什么好的理由,既有代码结构>代码,也有代码>类<代码>。大概是“代码>类< /C> >为OO SooLy添加的。这是一个@ eCuMUR,我在这个问题上没有看到任何解释为什么“类”和“结构”一起存在。从来没有一个时间是C++中的一个结构。(至少在标准C++中,我不太了解标准前时代,我承认)。相关的,也许涉及到这个问题的答案:引用被断章取义。它来自第3页第76页,就在它之前说:那么,为什么我在这一点上没有选择使结构和类有不同的概念呢?我的意图是要有一个单一的概念:一组单一的布局规则……等等[sic]“@uhosomebodyneedsappupper但是原始上下文与此不同吗(我没有这本书)?这不正是我们在这里推测的吗?设计决策的原因是什么,结构和类是相同的,而不是让结构是C结构,类是新事物。我认为这句话看起来相当自给自足,但如果你认为这是值得的,那么我将感谢前面的pa的添加我认为你对的考虑不引入类< /Cord>选项,这就需要一些东西。如果你根本不引入类,也就是没有构造函数和析构函数,这就意味着没有RAII,也可能没有例外,因为结果C++是完全不同的。FC++是我们今天所知道的,甚至正如我们在1995所知道的。@ ChrisBeck,我考虑过“不要引入课堂”。"这意味着结构将被设计成它们现在的结构-构造函数和析构函数,并且简单地说,没有新的关键字被引入,并且类的概念会有不同的名字-Strut。我甚至没有想到一个设计可以省略基本的OOP特征。使用它和C++是有很大区别的,我明白了。