这个问题已经在c# /. net上下文中提出过了。
现在我想学习c++中结构体和类的区别。请讨论在OO设计中选择一种或另一种的技术差异以及原因。
我将从一个明显的区别开始:
如果没有指定public:或private:,结构体的成员默认为public;默认情况下,类的成员是私有的。
我敢肯定,在c++规范的晦涩角落里还会发现其他不同之处。
这个问题已经在c# /. net上下文中提出过了。
现在我想学习c++中结构体和类的区别。请讨论在OO设计中选择一种或另一种的技术差异以及原因。
我将从一个明显的区别开始:
如果没有指定public:或private:,结构体的成员默认为public;默认情况下,类的成员是私有的。
我敢肯定,在c++规范的晦涩角落里还会发现其他不同之处。
当前回答
这里有一个很好的解释:http://carcino.gen.nz/tech/cpp/struct_vs_class.php
所以,再强调一次:在c++中,结构体与类是相同的,除了结构体的成员默认具有公共可见性,而类的成员默认具有私有可见性。
其他回答
你忘记了类和结构之间棘手的第二个区别。
引用标准(§11.2.2在c++ 98到c++ 11):
在没有访问说明符时 对于基类,假定为public 当声明派生类时 Struct和private在类声明为class时被假设。
为了完整起见,更广为人知的class和struct之间的区别定义在(11.2)中:
类定义的类的成员 关键字类private by 违约。定义的类的成员 使用关键字struct或union 默认为public。
另一个区别是:关键字class可以用来声明模板参数,而struct关键字不能这样使用。
唯一的其他区别是类和结构的默认继承,不出意外,它们分别是私有和公共的。
您可以将此作为何时使用struct或class的指导方针,https://msdn.microsoft.com/en-us/library/ms229017%28v=vs.110%29.aspx。
的实例,考虑定义一个结构体而不是类 类型小,通常寿命短或通常嵌入 其他对象。 避免定义结构体,除非该类型具有所有的 以下特点: 它在逻辑上代表一个值, 类似于基本类型(int, double等)。 它有一个实例 大小小于16字节。 它是不可变的。 它不必被装箱 频繁。
Iso iec14882 -2003 9类 §3 结构是用定义的类 类键结构体;它的成员 基类(第10条)是 默认为公开(第11条)。
这里有一个很好的解释:http://carcino.gen.nz/tech/cpp/struct_vs_class.php
所以,再强调一次:在c++中,结构体与类是相同的,除了结构体的成员默认具有公共可见性,而类的成员默认具有私有可见性。