12

在这种情况下,使用类而不是结构有什么优势吗?(注意:它只会保存变量,永远不会有函数)

class Foo { 
private:   
   struct Pos { int x, y, z };
public:    
   Pos Position; 
};

相对:

struct Foo {
   struct Pos { int x, y, z } Pos;
};

类似的问题:

4

7 回答 7

23

在 c++ 中,使用其中一个并没有真正的优势,结构和类之间的唯一区别是其成员的默认可见性(结构默认为公共,类默认为私有)。

就个人而言,我倾向于将结构用于 POD 类型,而将类用于其他所有类型。

编辑:litb在评论中提出了一个很好的观点,所以我要在这里引用他的话:

另一个重要的区别是结构默认派生自其他类/结构公共,而类默认派生私有。

于 2009-01-10T17:58:23.063 回答
8

一方面,结构通常用于聚合初始化数据结构,因为所有非静态数据成员无论如何都必须是公共的(C++03、8.5.1/1)。

struct A {  // (valid)
{
   int a;
   int b;
} x = { 1, 2 };

struct A {  // (invalid)
private:
   int a;
   int b;
} x = { 1, 2 };

class A {  // (invalid)
   int a;
   int b;
} x = { 1, 2 };

class A {  // (valid)
public:
   int a;
   int b;
} x = { 1, 2 };

class A {  // (invalid)
public:
   int a;
private:
   int b;
} x = { 1, 2 };
于 2009-01-12T20:53:44.470 回答
6

struct并且在 C++ 中的class含义完全相同,只是结构成员和基的默认访问是公共的,而对于类是私有的。我倾向于为只有公共成员的类和其他所有类的类选择结构,但这只是一个样式问题。

于 2009-01-10T17:59:08.117 回答
3

类和结构的唯一区别是结构成员默认是公共的,类成员默认是私有的。所以我说选择你最喜欢的那个。我敢肯定,对于哪个更具可读性,有一些争论,但我真的不认为这有什么大不了的。

于 2009-01-10T17:58:57.040 回答
1

本质上,结构和类之间的选择取决于你的风格和你想输入多少。

  • 如果您在类/结构中只有公共成员,您不妨使用 struct 关键字。这将使您不必在以后输入“public:”。
  • 选择结构而不是类的另一个原因是隐式记录对象的意图。因此,您将创建 POD 类型结构(即使它们包含构造函数和一些静态辅助方法等),并且您将对所有其他“常规”类使用类。
于 2009-01-11T00:16:50.600 回答
0

如果类型的内容没有内存分配问题(例如普通 int),那么struct如果这是您想要的方式,并且您已经做出有意识的决定,您可以向使用您的代码的人证明这一点,那么使用就可以了. 但是,如果任何成员是指针类型,那么您需要认真考虑内存管理问题。使用 a 可能仍然可以struct,但您更有可能需要一个析构函数和一些构造函数,等等。那个时候,你想要一个class.

于 2009-01-10T19:13:36.187 回答
-1

“(注意:它只会保存变量,永远不会有函数)”

从来不是一个大词。通常“从不”的意思是“最终”。既然如此,我建议你使用一个类。这样,当事情发生变化时,你就没有太多需要改变的地方了。

Java(和 Python)的人在一切都是一个类的问题上相处得很好。没有这些被 C++ 称为“结构”的专门的无方法类并没有对他们造成任何伤害。

于 2009-01-10T17:58:43.763 回答