为什么我们在C++中需要一个“类”,而“结构”可以用来实现同样的目的

Why do we need a `class` in C++, when a `struct` can be used to achieve the same?

本文关键字:结构 实现 C++ 我们 一个 为什么      更新时间:2023-10-16

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

为什么我们需要class

注意:我不希望答案说在struct中,字段/方法默认为public

您不需要类,该语言只是为您提供了另一个选择。从技术上讲,你是对的,你可以用struct实现class可以做的任何事情。

除了默认的访问级别,大多数程序员还将这两个级别联系在一起——struct通常意味着一种轻量级的数据类型,通常是POD,几乎没有功能。class通常与更大的事物相关联。

正如Tal Pressman在C++中应该何时使用类与结构?中回答的那样:

来自C++常见问题解答:

结构的成员和基类默认情况下是公共的,而在类中,它们默认为私有的。注意:您应该使基类显式地公开、私有或受保护,而不是依赖于默认值。

结构和类在其他方面是等效的。

好吧,听够了那种干净的科技谈话。从情感上讲,大多数开发人员对类和结构进行了强烈的区分。一个结构感觉就像是一堆开放的比特,几乎没有封装或功能。一个阶级感觉像是一个有活力、有责任感的社会成员,拥有智能服务、强大的封装屏障和定义良好的界面。由于这是大多数人已经拥有的内涵,如果你有一个方法很少并且有公共数据的类(这样的东西确实存在于设计良好的系统中!),你可能应该使用struct关键字,但除此之外,你可能还应该使用class关键字。

http://www.parashift.com/c++-faq-lite/classes and objects.html#faq-7.8

我认为这个原因的一个补充可能是C已经有了structs。当Bjarne Stroustrup设计C++时,他想添加具有您在原始问题中列出的所有功能的类,这些功能在C中不存在。在实现这些功能时,他可能意识到为结构和类进行两个单独的实现是没有意义的(除了公共/私有默认可见性)。

TL/DR:在C++中,structs/classes描述了程序员拥有POD或更复杂抽象的意图,而class关键字的引入可能是出于历史原因(添加一个额外的关键字以创建功能完整的类,然后将这些特性反向移植到struct关键字中,因为实现起来更实用)。

class只是OO中用于实例化对象的类型的常用名称。在C++中引入OO范式时,使用class而不是struct并不令人惊讶。

保留struct以最大限度地提高与C.的向后兼容性

现在两者的用法与此一致:struct最常用于C风格的POD类型,而class用于类的OO概念。

长话短说,实际上根本不需要class。它将默认值更改为可以说更安全、更适用于OO编程的默认值,但对于当前使用class的任何地方,都可以使用struct(由C++定义)(如果您想了解它的可爱和元特性,可以将struct称为满足LSP的class的基类)。

同时,C++中对struct的误解非常普遍,class更符合预期概念,因此通常更容易解释。新用户似乎经常觉得这至少稍微更容易理解——这本身就是一个合理的目标。

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

举个例子,如果你已经用C++做了一些编码,而某个在Java工作的人在2个月后来审查你的代码,他会觉得理解带"struct"的代码和带"class"的代码更舒服吗?