在C++中,为什么struct实际上是类?

Naw*_*waz 6 c++ oop struct class backwards-compatibility

那里的其他主题和回答让我问这个问题:

为什么C++允许struct表现得像class?一方面,C++ 通过默认C-struct使其成员公开(就像在C中一样)使其兼容,而另一方面,它通过允许它从类继承并应用其他对象使其看起来像类 -导向技术(不再像以前那样C-struct).为什么C-struct没有OOP会让它变得陈旧?任何特殊原因?

Mar*_*tos 7

它允许以更自然的方式使用C++代码安装现有结构.例如,您可以将成员函数添加到结构中并从结构继承,如果结构和类居住在不同的Universe中,这将是不可能的.

Stroustrup最初的目的是避免传统的C式"结构"阵营和OO"阶级"人群之间社区的破裂.他还提到了只有一个概念而不是两个概念的好处.


CB *_*ley 6

从语言的角度来看,结构联合只是类的类型.如果概念较少(使用小写字母'c'),它会使语言规范更简单,并且它还使得指定语言不易出错,因为如果每个公共属性必须拼写出来,就不容易错过任何"明显"的东西对于每个结构,工会和非结构,非工会类.

C++类比C结构具有许多潜在的功能,但由于C结构可以被视为简并C++类,因此最简单的是允许它们完全相同.拥有特殊的结构概念和概念没有任何好处.

来自ISO/IEC 14882:2003,9 [class]/4:

结构是与所定义的一类类密钥 struct ; 默认情况下,其成员和基类是公共的.甲联盟是与所定义的一类类密钥 union ; 默认情况下,其成员是公共的,并且一次只保存一个数据成员.