为什么我们在C ++中需要`class`?

时间:2011-08-23 09:10:36

标签: c++

使用struct,我们可以实现class

的所有功能
  • 构造函数,析构函数
  • 成员函数,静态函数。
  • 重载功能,虚拟功能
  • public / private / protected access specifiers。
  • 运营商

唯一的区别是默认访问权限:class为private,struct为public 为什么我们需要一个班级?

8 个答案:

答案 0 :(得分:5)

IIRC在创建C ++时(作为带有类的C),设计目标只是添加功能,所以最初的想法是在C ++中有一个类,在C中有一个结构。但是后来事情变得模糊了并且在接下来的20年里,结构“变异”成某种类。

答案 1 :(得分:3)

因为它显然是OO。

注意:这个答案具有讽刺意味,正如OP struct所表明的那样,class实现了{{1}}的所有功能,所以几乎没有增值,而且它似乎更像是一种随意的设计选择。一种主张限制保留字数的语言非常奇怪。

答案 2 :(得分:2)

虽然struct可以表现得像一个类,但它并没有强调语言的面向对象性。所以我认为class被添加到语言中以强调C ++的面向对象。它还强调数据封装,因为默认情况下类中的所有内容都是private,而struct并不强调数据封装,因为结构中的所有内容都是{{ 1}}默认情况下。

数据封装是面向对象编程的原则之一,所以我认为,使默认访问public非常重要。它从一开始就给出了阶级设计的感觉。只是假装在C ++中没有关键字private,那么想象有多少人会创建像这样的主题,为什么C ++中的所有内容都是公共的,因为结构中的所有内容都是公共的?它是支持面向对象编程的语言的一个特征“。对我来说,感觉C ++缺乏阶级设计感。

答案 3 :(得分:2)

如果您采用的约定是对封装的OO类类型使用class而对于具有公共数据成员的非包含结构聚合类型使用struct,则可以认为您可以获得更易读的代码:这是通常由编码标准强制使用。

答案 4 :(得分:0)

这主要是一种更直观的语法。在基于类的OO语言中没有class似乎很奇怪。

答案 5 :(得分:0)

我认为区别在于语义,有点语法。 class强调这是一个阶级而不是其他任何东西。所以它的名字告诉它的用法。与struct一样,我们可以通过对其他基本类型进行分组来构造某些内容,例如新数据类型。但是可以对数据类型进行分组并使用class创建新数据类型,但在这种情况下,名称class会产生误导。

答案 6 :(得分:0)

你是对的。理想情况下,我们不需要class。它是出于历史原因而引入的,其中C ++ wanted to distinguish的发明者在struct之间作为普通旧数据类型(C样式)构造,而class作为接口可以具有函数和构造函数好。 (尽管struct仍然拥有class)的所有权限。

如果从C ++语言中删除class关键字,它仍可以完美运行(不是旧代码)。因为struct可以实现正常使用,template可以实现typename相关含义。

答案 7 :(得分:0)

对我而言,类和结构之间的区别在于文档。

从技术上讲,我们不需要它们(就像语言的许多功能一样),但它们允许我们通过我们使用它们的方式向我们的代码用户传递额外的信息(只要你不滥用它们并遵循标准惯例)。

他们下面同样的事情。但我发现在不同的环境中我用它来识别不同的东西。因此,我能够通过声明它们的方式向我的类型的用户传达额外的信息。

我如何使用它们:

  • 类通常推断某种形式的对象具有与之关联的动作。
    • 即。您标准的OO对象概念。
  • struct(通常)推断某种形式的属性包
    • 它可能有方法但不一定是以行动为导向。
  • 仿函数通常实现为struct
    • 特别是如果他们没有内部状态。