7

使用 astruct我们可以实现 a 的所有功能class:构造函数(可以修改/重载)、析构函数(可以修改/重载)、运算符重载、实例方法、静态方法、public//字段/方法privateprotected

那我们为什么需要class呢?

注意:我不希望答案说 in struct,字段/方法是public默认的。

4

5 回答 5

10

不需要课程,该语言只是为您提供了另一种选择。从技术上讲,你是对的,你可以classstruct.

除了默认访问级别之外,还有大多数程序员与这两者相关联的含义 -struct通常意味着轻量级的,通常是POD几乎没有功能的数据类型。Aclass通常与更大的东西相关联。

于 2013-07-29T08:46:05.180 回答
3

正如 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 关键字中,因为它更实用)。

于 2013-07-29T08:52:13.830 回答
2

class只是 OO 中用于实例化对象的类型的普遍接受的名称。在 C++ 中引入 OO 范例时,class使用struct.

struct保留以最大化与 C 的向后兼容性。

今天这两个的用法是符合这个的:struct最常用于C风格的POD类型,而class用于OO概念的类。

于 2013-07-29T08:48:02.813 回答
1

长话短说,class真的根本不需要。它将默认值更改为可以说更安全且更适用于 OO 编程的默认值,但是您可以将 a struct(由 C++ 定义)用于您当前使用 a 的任何地方class(如果您想获得关于它的可爱和元数据,您可以调用满足 LSPstruct的基类)。class

同时,对structC++ 的误解十分猖獗,并且class更符合预期的概念,因此通常更容易解释。新用户似乎经常觉得它至少更容易理解——这本身就是一个合理的目标。

于 2013-07-29T08:47:33.707 回答
0

C++ struct 和 C++ class 之间没有这样的区别,你可以像使用 class 一样使用 struct 执行几乎所有功能,但是 struct 是一个 C 关键字,它在 C++ 中逐渐被修改/演变并命名为 class。我们在 C++ 中,最好使用类而不是结构。

举个例子,如果你用 C++ 编写了一些代码,而一个用 Java 工作的人在 2 个月后来审查你的代码,他会觉得哪一个更容易理解带有“结构”的代码或带有“类”的代码?

于 2013-07-29T08:46:47.700 回答