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<typename T>
,template<class T>
有点误导,因为它是遗留的。
然后在 int 和 class 之间添加另一个区别..!! template<class T> ... works
但template<int T> ... not
@UnKnown,当然可以,出于历史原因,我们只是将整数称为I
、J
、K
、L
。以上是关于C ++ - 结构与类[重复]的主要内容,如果未能解决你的问题,请参考以下文章