使用struct
,我们可以实现class
:
唯一的区别是默认访问权限:class为private,struct为public 为什么我们需要一个班级?
答案 0 :(得分:5)
答案 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)
对我而言,类和结构之间的区别在于文档。
从技术上讲,我们不需要它们(就像语言的许多功能一样),但它们允许我们通过我们使用它们的方式向我们的代码用户传递额外的信息(只要你不滥用它们并遵循标准惯例)。
他们下面同样的事情。但我发现在不同的环境中我用它来识别不同的东西。因此,我能够通过声明它们的方式向我的类型的用户传达额外的信息。
我如何使用它们: