为什么C ++中的关键字结构与C中的关键字结构不同?

时间:2018-05-08 14:10:24

标签: c++ language-design

从设计的角度来看,可以将class关键字添加到C ++中,以实现所需的OO原则,如封装,继承,多态,以及构造函数和析构函数等......但同时离开关键字struct就像它在C中定义一样,因此能够a)编译遗留C代码和b)定义简单的POD。

我无法看到使struct行为(几乎)与C ++中的class相似的原因。

或者换句话说:为什么他们不在C ++中单独留下C struct关键字?

任何提示?

2 个答案:

答案 0 :(得分:2)

  

我无法看到使结构行为(几乎)像C ++中的类一样的原因。

其中一个原因 - 提供从struct添加构造函数/析构函数等继承的能力,但它仍然可以作为C结构传递给C函数。

答案 1 :(得分:1)

  

因此能够a)编译遗留C代码

但是指定类的方式,你可以在C ++中编译遗留的C结构定义(除了与结构无关的潜在向后不兼容性,例如新添加的关键字)。

  

b)定义简单的POD。

C ++类引入的OOP功能并未阻止定义简单POD的能力。您可以用C ++定义POD类。

a)和b)都是在没有分离struct和class的含义的情况下实现的,所以你没有证明这样做的论据。

面向对象的概念是复合数据类型概念的扩展,它是C结构的概念。没有必要通过为C结构添加单独的定义来使语言复杂化,因为C ++类足以实现此目的。 简单是用语言努力的一个很好的特质 - 特别是当语言在这方面非常缺乏时。