在这种情况下,使用类而不是结构有什么优势吗?(注意:它只会保存变量,永远不会有函数)
class Foo {
private:
struct Pos { int x, y, z };
public:
Pos Position;
};
相对:
struct Foo {
struct Pos { int x, y, z } Pos;
};
类似的问题:
在这种情况下,使用类而不是结构有什么优势吗?(注意:它只会保存变量,永远不会有函数)
class Foo {
private:
struct Pos { int x, y, z };
public:
Pos Position;
};
相对:
struct Foo {
struct Pos { int x, y, z } Pos;
};
类似的问题:
在 c++ 中,使用其中一个并没有真正的优势,结构和类之间的唯一区别是其成员的默认可见性(结构默认为公共,类默认为私有)。
就个人而言,我倾向于将结构用于 POD 类型,而将类用于其他所有类型。
编辑:litb在评论中提出了一个很好的观点,所以我要在这里引用他的话:
另一个重要的区别是结构默认派生自其他类/结构公共,而类默认派生私有。
一方面,结构通常用于聚合初始化数据结构,因为所有非静态数据成员无论如何都必须是公共的(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 };
struct
并且在 C++ 中的class
含义完全相同,只是结构成员和基的默认访问是公共的,而对于类是私有的。我倾向于为只有公共成员的类和其他所有类的类选择结构,但这只是一个样式问题。
类和结构的唯一区别是结构成员默认是公共的,类成员默认是私有的。所以我说选择你最喜欢的那个。我敢肯定,对于哪个更具可读性,有一些争论,但我真的不认为这有什么大不了的。
本质上,结构和类之间的选择取决于你的风格和你想输入多少。
如果类型的内容没有内存分配问题(例如普通 int),那么struct
如果这是您想要的方式,并且您已经做出有意识的决定,您可以向使用您的代码的人证明这一点,那么使用就可以了. 但是,如果任何成员是指针类型,那么您需要认真考虑内存管理问题。使用 a 可能仍然可以struct
,但您更有可能需要一个析构函数和一些构造函数,等等。那个时候,你想要一个class
.
“(注意:它只会保存变量,永远不会有函数)”
从来不是一个大词。通常“从不”的意思是“最终”。既然如此,我建议你使用一个类。这样,当事情发生变化时,你就没有太多需要改变的地方了。
Java(和 Python)的人在一切都是一个类的问题上相处得很好。没有这些被 C++ 称为“结构”的专门的无方法类并没有对他们造成任何伤害。