繁体   English   中英

Class vs Struct仅用于数据?

[英]Class vs Struct for data only?

在诸如此类的情况下,在结构上使用类是否有任何优势? (注意:它只会保存变量,永远不会有函数)

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

与:

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

类似的问题:

使用一个优于另一个没有真正的优势,在c ++中,结构和类之间的唯一区别是它的成员的默认可见性(结构默认为public,类默认为private)。

就个人而言,我倾向于选择POD类型的结构,并使用类来完成其他任何事情。

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

另一个重要的区别是,默认情况下,struct派生自其他类/ struct public,而类默认派生私有派生。

一方面是结构通常用于聚合初始化数据结构,因为所有非静态数据成员无论如何都必须是公共的(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 };

structclass在C ++中的含义完全相同 ,除了struct成员和base的默认访问是公共的,而对于类是私有的。 我倾向于为只有公共成员的类和其他所有类的类选择struct,但它只是一个样式问题。

类和结构之间的唯一区别是,默认情况下,struct成员是公共的,而类成员是私有的。 所以我说你最喜欢哪一个。 我确信有哪些论据可以说是哪一个更具可读性,但我真的不认为这是一个大问题。

从本质上讲,结构和类之间的选择取决于您的风格以及您想要键入的内容。

  • 如果您只在类/结构中有公共成员,那么您也可以使用struct关键字。 它将节省您以后输入“public:”的时间。
  • 在类上选择结构的另一个原因是隐式记录对象的意图。 因此,您将创建POD类型结构(即使它们包含构造函数和一些静态帮助器方法等),并且您将使用类用于所有其他“常规”类。

如果该类型的内容没有内存分配问题(例如plain int),那么使用struct就可以了,如果这是您想要的方式,并且您已经有意识地决定它,那么您可以证明那些使用您的码。 但是,如果任何成员是指针类型,那么您需要仔细考虑内存管理问题。 使用struct可能仍然可以,但您更可能需要析构函数和一些构造函数,等等。 那时,你想要一class

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

永远不是一个大词。 通常“从不”意味着“最终”。 既然如此,我建议你使用一堂课。 这样,当事情发生变化时,你就没有那么多改变了。

Java(和Python)人员已经很好地完成了所有类。 如果没有这些C ++称为“struct”的专用无方法类,它并没有伤害到它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM