我正在学习 C++ 中的面向对象编程类(class)。在最近的一次作业中,我在 struct
中定义了一个成员函数。我的导师解释说,尽管在结构中使用成员函数是可编译的,但他宁愿我们不这样做,因为它与 C 向后兼容,并且(尤其是在这个初学者类(class)中)练习良好的数据封装——我们应该使用 struct
用于主要包含数据的类型,class
用于受益于更多过程封装的应用程序。他表示这种做法来自于 C++ 结构/类的历史,这是我想进一步了解的。
我知道除了默认成员/继承访问之外,结构在功能上与类相同。我的问题是:
为什么 C++ 中包含结构和类?从我在 C# 中的背景来看,结构和类有重要区别,似乎 C++ 中的 struct
只是用于定义具有默认公共(public)性的类的语法糖。是吗?
我不是在寻找意见关于何时/为什么应该使用一个而不是另一个 - 我出生在这些构造之后,我正在寻找历史 他们。他们是一起受孕的吗?如果是这样,为什么?如果不是,那么先出现哪个,为什么要添加第二个?我意识到这个社区中有许多可敬的长者可能对这些功能的起源有鲜活的内存,并且链接到标准出版物或代码示例,其中一个或另一个首次出现,将增加答案的帮助.
请注意,这个问题不是:
最佳答案
为了简化多语言 header 的开发。
C 和 C++ 是不同的语言,但 C++ 语言旨在为 C 语言提供一个有用的公共(public)子集。 C++ 语言中几个常用的结构与它们在 C 语言中的含义相同(或几乎相同)。对于 struct
,C++ 语言将其定义为 class
的语法糖,它近似于 C 语言中 struct
的行为,即默认情况下,成员是 public
的。因此,可以在这个公共(public)子集中编写程序或其一部分。例如,这允许库提供一个单个头文件,该文件为用 C 语言编写的程序和用 C++ 语言编写的程序声明相同的 API。
a question that has since been closed as too broad 中列出了 C 语言和 C++ 语言之间的一些差异。 .从使用这种公共(public)子集语言编程的人的角度来看,这些差异可以被视为“实现定义的行为”,其中 C 语言的编译器产生一种行为,而 C++ 语言的编译器产生另一种行为。
事实上,C++ 标准提供了帮助开发polyglot programs 的机制。在 C 和 C++ 语言中都有效。 extern "C"
linkage specifier允许程序部分用 C 编写,部分用 C++ 编写。而 __cplusplus
符号用于 #ifdef __cplusplus
conditions有条件地启用宏、链接说明符和其他只有两种语言中的一种才能看到的细节。
关于c++ - C++中结构/类的历史是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32976426/