C ++ - 结构与类[重复]

Posted

技术标签:

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

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

嗨,

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

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

我的问题是:

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

谢谢。

【问题讨论】:

重复:***.com/questions/2750270/c-c-struct-vs-class @aali == @SWEngineer 的副本? cplusplus.com/doc/tutorial/classes/#struct_and_union 【参考方案1】:

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

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

【讨论】:

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

POD 类是Plain-Old 数据类,它只有数据成员,没有别的。关于 *** 有几个相同的问题。找到一个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

以上是关于C ++ - 结构与类[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C/C++ 结构与类

C# PInvoke 结构与类访问冲突

结构体与类

C++中结构体与类的区别

结构体与类

Swift 结构体与类