使用 astruct
我们可以实现 a 的所有功能class
:构造函数(可以修改/重载)、析构函数(可以修改/重载)、运算符重载、实例方法、静态方法、public
//字段/方法private
。protected
那我们为什么需要class
呢?
注意:我不希望答案说 in struct
,字段/方法是public
默认的。
您不需要课程,该语言只是为您提供了另一种选择。从技术上讲,你是对的,你可以class
用struct
.
除了默认访问级别之外,还有大多数程序员与这两者相关联的含义 -struct
通常意味着轻量级的,通常是POD
几乎没有功能的数据类型。Aclass
通常与更大的东西相关联。
正如 Tal Pressman 在何时应该在 C++ 中使用类与结构?:
从 C++ 常见问题解答:
结构的成员和基类默认是公共的,而在类中,它们默认是私有的。注意:您应该明确地使您的基类公开、私有或受保护,而不是依赖默认值。
struct 和 class 在其他方面在功能上是等效的。
好的,足够干净的技术谈话了。从情感上讲,大多数开发人员在类和结构之间做出了强烈的区分。结构感觉就像是一堆开放的位,封装或功能的方式很少。一个类感觉就像是一个活生生的、负责任的社会成员,具有智能服务、强大的封装屏障和定义明确的接口。由于这是大多数人已经拥有的含义,因此如果您的类具有很少的方法并且具有公共数据(这样的东西确实存在于设计良好的系统中!),您可能应该使用 struct 关键字,否则您可能应该使用该类关键词。
http://www.parashift.com/c++-faq-lite/classes-and-objects.html#faq-7.8
我认为这个原因的一个补充可能是C已经有结构。当 Bjarne Stroustrup 设计 C++ 时,他想添加具有您在原始问题中列出的所有功能的类,这些功能在 C 中不存在。在实现这些功能时,他可能意识到为结构和类(公共/私有默认可见性除外)。
TL/DR:在 C++ 结构/类中,描述了程序员拥有 POD 或更复杂抽象的意图,而 class 关键字的引入可能是出于历史原因(添加一个额外的关键字以创建功能齐全的类,然后向后移植将这些功能放入 struct 关键字中,因为它更实用)。
class
只是 OO 中用于实例化对象的类型的普遍接受的名称。在 C++ 中引入 OO 范例时,class
使用struct
.
struct
保留以最大化与 C 的向后兼容性。
今天这两个的用法是符合这个的:struct
最常用于C风格的POD类型,而class
用于OO概念的类。
长话短说,class
真的根本不需要。它将默认值更改为可以说更安全且更适用于 OO 编程的默认值,但是您可以将 a struct
(由 C++ 定义)用于您当前使用 a 的任何地方class
(如果您想获得关于它的可爱和元数据,您可以调用满足 LSPstruct
的基类)。class
同时,对struct
C++ 的误解十分猖獗,并且class
更符合预期的概念,因此通常更容易解释。新用户似乎经常觉得它至少更容易理解——这本身就是一个合理的目标。
C++ struct 和 C++ class 之间没有这样的区别,你可以像使用 class 一样使用 struct 执行几乎所有功能,但是 struct 是一个 C 关键字,它在 C++ 中逐渐被修改/演变并命名为 class。我们在 C++ 中,最好使用类而不是结构。
举个例子,如果你用 C++ 编写了一些代码,而一个用 Java 工作的人在 2 个月后来审查你的代码,他会觉得哪一个更容易理解带有“结构”的代码或带有“类”的代码?