【问题标题】:C++ - struct vs. class [duplicate]C ++ - 结构与类[重复]
【发布时间】:2011-06-15 01:56:51
【问题描述】:

可能的重复:
C/C++ Struct vs Class
What are POD types in C++?

嗨,

C++ In a Nutshell 一书中,在第6章:类中,访问说明符下提到了以下内容:

在类定义中,默认 成员和基类的访问权限是 私人的。在结构定义中, 默认是公开的。 这是唯一的 一个类和一个类之间的区别 struct,虽然按照惯例,有些 程序员仅将 struct 用于 POD 类并使用类所有其他 类

我的问题是:

  • 类和结构之间是否还有另一个区别,即结构不保存函数而只保存数据?
  • 什么是 POD 类?而且,这里所有其他类是什么意思?那么有特殊课程吗?

谢谢。

【问题讨论】:

标签: c++


【解决方案1】:

您可以通过尝试在结构中定义函数来向自己证明没有其他区别。我记得即使是我教授 C++ 结构和类的大学教授也惊讶地发现这一点(在被学生纠正后)。不过我相信。这有点有趣。教授一直在说差异是什么,学生一直在说“实际上你也可以在结构中做到这一点”。最后是教授。问“好的,有什么区别”,学生告诉他唯一的区别是成员的默认可访问性。

快速的 Google 搜索表明 POD 代表“Plain Old Data”。

【讨论】:

  • 那位老师的日子不好过,毫无疑问:)
  • 那位老师试图探索/学习 C 而非 C++ 中 struct 和 class 之间的区别,因为在 C 中我们无法在 struct 中添加函数。
  • C 甚至没有类:P 人们只是认为 C++ 中的结构不能有方法,因为他们认为 C++ 是 C 的超集,这导致错误假设 C++ 结构与 C 相同结构。
【解决方案2】:

POD 类是Plain-Old 数据类,它只有数据成员,没有别的。关于 stackoverflow 有几个相同的问题。找到一个here

此外,您可以在 C++ 中将函数作为结构的成员,但在 C 中则不能。您需要将指向函数的指针作为 C 中的结构成员。

【讨论】:

    【解决方案3】:

    1) 这是 C++ 的唯一区别。

    2) POD:plain old data 其他类 -> 不是 POD

    【讨论】:

      【解决方案4】:

      好的,POD 表示普通旧数据。这通常指的是structs没有任何方法,因为这些类型随后用于构造属于一起的多个数据。

      至于没有方法的结构体:我不止一次看到结构体有方法,我不觉得这不自然。

      【讨论】:

        【解决方案5】:

        另一个区别是

        template<class T> ...
        

        是允许的,但是

        template<struct T> ...
        

        不是。

        【讨论】:

        • +1 独特的方法
        • 官方使用模板的方式是template&lt;typename T&gt;template&lt;class T&gt; 有点误导,因为它是遗留的。
        • 然后在 int 和 class 之间添加另一个区别..!! template&lt;class T&gt; ... workstemplate&lt;int T&gt; ... not
        • @UnKnown,当然可以,出于历史原因,我们只是将整数称为IJKL
        猜你喜欢
        • 2010-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-21
        • 2011-02-14
        • 2016-02-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多