【问题标题】:In C++, is a struct also a class? [duplicate]在 C++ 中,结构也是类吗? [复制]
【发布时间】:2011-04-11 10:11:44
【问题描述】:

可能重复:
C/C++ Struct vs Class

我知道结构和类之间的技术差异;当然,这个问题以前也有人问过。

面向对象的编程将对象和类联系起来。在 C++ 分类法中,结构也是类吗?

【问题讨论】:

  • 我想标记 stackoverflow.com/questions/92859/… 的重复项,但实际上这个问题及其答案并没有直接出现并说用 struct 定义的类与类一样多用class 定义的类是。从这个意义上说,“结构和类之间有什么区别”这个问题已经是错误的,它意味着有两种类型。它应该是“关键字结构和关键字类之间有什么区别”,因为在 C++ 中实际上并没有“结构”之类的东西。
  • 我在提问之前阅读了这两个问题,并相信这不是重复的;希望是一个简单、具体且有用的问题;至少对我来说。这是分类法的问题。 C++“结构”还是“类”?谢谢。
  • @user643722:在这种情况下,您想要的答案是 9/4:“structure 是一个类......”。有关差异的任何进一步信息都来自您的 POV。但请注意严格使用此定义。我认为在(例如)17.1.8 中不明智地使用了“结构”这个词,我不确定我是否相信标准真的打算说 traits 模板参数用 class 定义是未定义的行为.此外,当标准提到“数据结构”时,它通常指的是类,而不是这种意义上的结构。
  • 预声明类/结构的时候也有区别:如果一个结构定义为struct A { ... };,那么在预声明的时候,需要预声明为struct A;,也不是@987654331 @。一些编译器(例如 MSVC)区分对 classstruct 成员使用不同的名称修饰。

标签: c++ class struct taxonomy


【解决方案1】:

是的,它是一个成熟的类 - struct 关键字是一种语法糖,默认情况下所有成员均可公开访问,而 class 中的成员默认为私有。

【讨论】:

  • +1。语法仍然存在,主要是为了与纯 C 完全兼容。
  • 感谢尖牙。我知道这些差异。我猜你的直觉是,通过如此相似,结构也是一个类。这也是 C++ 标准中的立场吗?我问的一个原因是我看到 cmets 将作者对结构的引用更正为一个类。
  • 两者占用内存的方式有区别吗?
  • @Salaman:不,它们是一样的。这不是 C#。
  • @user643722 - 这主要是一个历史事故。曾几何时,类被添加到 C 中,创建了“C with classes”语言。这种语言最终演变成我们现在所知的 C++。在此过程中,有一天有人问“为什么我们不能在结构中拥有成员函数?”。答案是“没有理由”。所以,我们到了。
【解决方案2】:

是的。唯一的区别是默认情况下,class 中的所有内容都是私有的,而struct 中默认情况下所有内容都是公开的。从这个意义上说,区别纯粹是句法上的。

【讨论】:

  • 作为纯粹的语法差异,这是否意味着结构也是一个类?
  • 或者换句话说,'class' 和 'struct' 有不同的命名空间吗? class foostruct foo可以同时存在吗?
  • @Alnitak:试试看。您的编译器会抱怨重新定义 struct foo(或 class foo,以您先定义的为准)。
  • @Alnitak:不,这是分类问题。
  • 确实 - 拥有一个共享的命名空间是它们共享分类的进一步证据。
【解决方案3】:

在分类学上,是的。除了它们不同的默认访问说明符之外,它们在 C++ 中是完全相同的

  • a 的所有成员和属性 struct 默认为public

  • a 的所有成员和属性 class 默认为private

【讨论】:

  • 你说,基本上,是的。我可以确定是吗? :)(我确实知道技术差异。)
【解决方案4】:
  1. 结构的成员默认是公开的
  2. 类的默认继承是私有的,而结构的默认继承是公有的

【讨论】:

  • 在我的问题中,我确实提到我知道技术差异。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-21
  • 2013-08-20
  • 1970-01-01
相关资源
最近更新 更多