在c++中,在哪些情况下使用结构体比使用类更好?


当前回答

它们几乎是一样的。由于c++的魔力,结构体可以像类一样保存函数、使用继承、使用“new”创建等等

唯一的功能区别是类以私有访问权限开始,而结构以public开始。这是对C语言的向后兼容。

在实践中,我总是使用结构体作为数据持有者,类作为对象。

其他回答

回答我自己的问题(无耻地),正如已经提到的,访问权限是c++中它们之间的唯一区别。

我倾向于仅将结构体用于数据存储。我将允许它获得一些帮助函数,如果它使处理数据更容易的话。然而,一旦数据需要流控制(即维护或保护内部状态的getter /setter)或开始获得任何主要功能(基本上更像对象),它将被“升级”为一个类,以更好地传达意图。

现有的答案中有很多误解。

class和struct都声明一个类。

是的,您可能必须在类定义中重新安排访问修改关键字,这取决于您用于声明类的关键字。

但是,除了语法之外,选择一种而不是另一种的唯一原因是惯例/风格/偏好。

有些人喜欢对没有成员函数的类坚持使用struct关键字,因为最终的定义“看起来像”C中的简单结构。

类似地,有些人喜欢对具有成员函数和私有数据的类使用class关键字,因为它表示“类”,因此看起来像他们最喜欢的面向对象编程书籍中的示例。

实际上,这完全取决于您和您的团队,这对您的程序没有任何影响。

下面这两个类除了名字以外在其他方面都是完全等价的:

struct Foo
{
   int x;
};

class Bar
{
public:
   int x;
};

你甚至可以在重新声明时切换关键字:

class Foo;
struct Bar;

(虽然这将破坏Visual Studio构建由于不一致,所以编译器将发出一个警告,当你这样做。)

下面的表达式都为true:

std::is_class<Foo>::value
std::is_class<Bar>::value

不过,请注意,在重新定义时不能切换关键字;这只是因为(根据单定义规则)跨翻译单元的重复类定义必须“由相同的标记序列组成”。这意味着你甚至不能交换const int成员;,并且与类或结构的语义无关。

它们是一样的,只是默认值不同(class默认为private, struct默认为public),所以理论上它们是完全可以互换的。

所以,如果我只是想打包一些信息来移动,我使用一个结构体,即使我在那里放了一些方法(但不是很多)。如果它是一个最不透明的东西,其中主要使用将通过方法,而不是直接到数据成员,我使用一个完整的类。

默认情况下,所有类成员都是私有的,所有结构成员都是公共的。 类有默认的私有基,Struct有默认的公共基。Struct在C中不能有成员函数,而在c++中可以有成员函数被添加到Struct中。除了这些差异之外,我没有发现任何令人惊讶的地方。

c++中类和结构的区别是:

结构成员和基类/结构在默认情况下是公共的。 默认情况下,类成员和基类/结构是私有的。

类和结构都可以混合使用public、protected和private成员,可以使用继承,也可以有成员函数。

我向你推荐:

对于没有任何类样特性的普通旧数据结构使用struct; 在使用私有或受保护成员、非默认构造函数和操作符等特性时使用类。