为什么C++中有一个class关键字?

Xin*_*nus 12 c++

这个问题就浮现在我的脑海,当我得知C++与C的背景下,即使有一个 struct为什么斯特劳斯认为有必要引入class关键字?我当时试过问过人,但得不到满意的答复.那么Stack Overflow社区可以回答它吗?

Ned*_*der 36

正如David所说,默认情况下结构是公共的,默认情况下类是私有的.更重要的一点是,向C添加面向对象是一个很大的变化,并且让开发人员准确表达自己的方式是设计语言的重要部分.

事实证明,从技术角度来看,struct和class之间的区别很小(default-public vs default-private),但在程序员看来,区别非常大.添加关键字是强调C++ OO特性的重要方法.

  • +1可以比我更好地解释它. (2认同)

Jos*_*ley 22

C++的设计和演变中,他描述了如何开发C++的对象模型和虚函数,(第76页):

此时,对象模型在某种意义上变得真实,即对象不仅仅是类的数据成员的简单聚合.具有虚函数的C++类的对象是与简单的C`struct`完全不同的野兽.那么为什么我现在不选择结构和类不同的概念呢?

我的意图是有一个单一的概念:一组布局规则,一组查找规则,一组解析规则等......我确信如果`struct`意味着"C和兼容性"对于用户而言,"class"意味着"C++和高级功能",社区将陷入两个不同的阵营,很快就会停止沟通.在设计课程时,能够根据需要使用尽可能多的语言功能对我来说是一个重要的想法.只有一个概念可以支持我从"传统的C风格编程"到类抽象,到面向对象编程的平滑和渐进过渡的想法.只有一个概念会支持这种"你只为你使用的东西买单"的理想.

所以听起来像是class引入了关键字来表示C++特定的面向对象,然后介绍了它与struct关键字的兼容性.

  • +1引用语言的作者而不是猜测他脑子里的东西! (5认同)

mjv*_*mjv 5

最初,C++被称为"C with classes"

编辑:
虽然下面的猜测是合理的,但两个关键字的原因可能是实用的:通过保持结构的语法和语义向后兼容,可以轻松地将C++引入现有程序(而不是重新访问所有程序)结构并将关键字'public'添加到它们......).

[推测]我有两个关键词的事实可能与新语言的起源有关,最初OO特征与新关键词"class"完全相关.随着这个成熟,我们决定在结构中引入一些OO功能并保持这些......

......两种不同用途的两个概念:

  • struct:用于典型的小型和仅数据的"对象",默认情况下其成员是公共的.(但也可能不太透明,也有行为).
  • class:对象通常将数据和行为(函数)分组,默认情况下其成员为private,以实现数据隐藏,封装和其他OO功能.

该结构用于完全或大部分透明的"对象",没有/很少数据隐藏或行为,在其非面向对象的使用的延续中(尽管这种透明结构在OO程序的更广泛的上下文中占有一席之地).因此,课程旨在引入数据隐藏和其他OO实践.

另一种方法可能是将struct关键字用于两种用法,要求程序员在其"类"意义上明确定义私有成员.在程序员社区中没有广泛理解OO概念的时候(参见本文中的其他回复),可能认为单独的关键字可以更好地帮助"社交"新功能/概念.