这个问题已经在c# /. net上下文中提出过了。
现在我想学习c++中结构体和类的区别。请讨论在OO设计中选择一种或另一种的技术差异以及原因。
我将从一个明显的区别开始:
如果没有指定public:或private:,结构体的成员默认为public;默认情况下,类的成员是私有的。
我敢肯定,在c++规范的晦涩角落里还会发现其他不同之处。
这个问题已经在c# /. net上下文中提出过了。
现在我想学习c++中结构体和类的区别。请讨论在OO设计中选择一种或另一种的技术差异以及原因。
我将从一个明显的区别开始:
如果没有指定public:或private:,结构体的成员默认为public;默认情况下,类的成员是私有的。
我敢肯定,在c++规范的晦涩角落里还会发现其他不同之处。
当前回答
根据c++编程语言中的Stroustrup:
你使用哪种风格取决于环境和品味。对于所有数据都是公共的类,我通常更喜欢使用struct。我认为这样的类“不是很合适的类型,只是数据结构”。
在功能上,除了public / private没有区别
其他回答
这只是一种惯例。可以创建结构来保存简单的数据,但稍后会随着成员函数和构造函数的添加而发展。另一方面,在struct中看到public: access之外的东西是不寻常的。
综上所述,我们可以得出结论,概念Class比“Structures”更适合代表现实世界中的对象。很大程度上是因为在课堂上使用的面向对象的概念在解释现实场景时非常实用,因此更容易将它们合并到现实中。例如,对于结构体,默认继承是公共的,但如果我们将此规则应用于现实世界,那就太荒谬了。但在类中,默认继承是私有的,这更现实。
无论如何,我需要证明的是类是一个更广泛的,现实世界适用的概念,而结构是一个原始的概念,具有糟糕的内部组织(即使结构遵循面向对象的概念,他们有一个糟糕的含义)
根据c++编程语言中的Stroustrup:
你使用哪种风格取决于环境和品味。对于所有数据都是公共的类,我通常更喜欢使用struct。我认为这样的类“不是很合适的类型,只是数据结构”。
在功能上,除了public / private没有区别
Iso iec14882 -2003 9类 §3 结构是用定义的类 类键结构体;它的成员 基类(第10条)是 默认为公开(第11条)。
你忘记了类和结构之间棘手的第二个区别。
引用标准(§11.2.2在c++ 98到c++ 11):
在没有访问说明符时 对于基类,假定为public 当声明派生类时 Struct和private在类声明为class时被假设。
为了完整起见,更广为人知的class和struct之间的区别定义在(11.2)中:
类定义的类的成员 关键字类private by 违约。定义的类的成员 使用关键字struct或union 默认为public。
另一个区别是:关键字class可以用来声明模板参数,而struct关键字不能这样使用。