在完成我的 C++ 课程后,在我看来,结构/类几乎是相同的,只是有一些细微差别。
我以前从未用 C 编程过;但我知道它有结构。在 C 中是否可以继承其他结构并设置 public/private 修饰符?
如果您可以在常规 C 中做到这一点,为什么我们还需要 C++?是什么让类与结构不同?
原文由 anon235370 发布,翻译遵循 CC BY-SA 4.0 许可协议
我将添加现有的答案,因为 现代 C++ 现在已经成为一种东西,并且已经创建了官方 核心指南 来帮助解决诸如此类的问题。
以下是指南中的相关部分:
C.2:如果类具有不变量,则使用类;如果数据成员可以独立变化,则使用 struct
不变量是对象成员的逻辑条件,构造函数必须为公共成员函数假设它建立。在建立不变量后(通常由构造函数),可以为对象调用每个成员函数。可以非正式地(例如,在评论中)或更正式地使用 Expects 来声明不变量。
如果所有数据成员都可以相互独立地变化,那么就不可能存在不变量。
如果一个类有任何私有数据,用户不能在不使用构造函数的情况下完全初始化一个对象。因此,类定义器将提供一个构造函数并且必须指定它的含义。这实际上意味着定义者需要定义一个不变量。
执法
寻找具有所有数据私有的结构和具有公共成员的类。
给出的代码示例:
struct Pair { // the members can vary independently
string name;
int volume;
};
// but
class Date {
public:
// validate that {yy, mm, dd} is a valid date and initialize
Date(int yy, Month mm, char dd);
// ...
private:
int y;
Month m;
char d; // day
};
Class
es 适用于例如相互派生或相互关联的成员。它们还可以帮助在实例化时进行健全性检查。 Struct
s 非常适合拥有“数据包”,其中没有什么特别的事情发生,但从逻辑上讲,将成员分组在一起是有意义的。
由此看来, class
es 的存在是为了支持封装和其他相关的编码概念,而 struct
s 根本不是很有用。
原文由 Dave 发布,翻译遵循 CC BY-SA 3.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
2 回答2.9k 阅读✓ 已解决
3 回答3.4k 阅读
在 C++ 中,结构和类几乎相同。唯一的区别是类中的访问修饰符(用于成员变量、方法和基类)默认为私有,结构中的访问修饰符默认为公共。
但是, 在 C 中,结构只是(公共)数据的聚合集合,没有其他类似类的特性:没有方法、没有构造函数、没有基类等。虽然 C++ 继承了关键字,但它扩展了语义。 (然而,这就是为什么在结构中默认为 public 的原因——一个写得像 C 结构的结构表现得像一个结构。)
虽然可以在 C 中伪造一些 OOP——例如,定义所有将指向结构的指针作为其第一个参数的函数,或者 偶尔 将具有相同前几个字段的结构强制为“子/超类”——它总是有点螺栓固定,并不是真正的语言的一部分。