从设计的角度来看,可以将class
关键字添加到C ++中,以实现所需的OO原则,如封装,继承,多态,以及构造函数和析构函数等......但同时离开关键字struct
就像它在C中定义一样,因此能够a)编译遗留C代码和b)定义简单的POD。
我无法看到使struct
行为(几乎)与C ++中的class
相似的原因。
或者换句话说:为什么他们不在C ++中单独留下C struct
关键字?
任何提示?
答案 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 ++类足以实现此目的。 简单是用语言努力的一个很好的特质 - 特别是当语言在这方面非常缺乏时。