在C ++中,struct和class之间的区别很小,基本上只有struct成员是默认的public,而class member是默认的私有。
但是,每当我需要纯数据结构时,我仍然会使用结构,例如:
struct Rectangle {
int width;
int height;
};
我觉得使用非常方便:
Rectangle r;
r.width = 20;
r.height = 10;
然而,数据结构来自程序编程,我正在进行面向对象的编程。将这个概念引入OO是不是一个坏主意?
答案 0 :(得分:34)
没有。如果在某处使用结构是有意义的,为什么要使用其他不符合目的的东西使事情复杂化?
在我的项目中,我倾向于将struct
用于简单的“结构”,只需要保存一些简单的数据。
如果数据结构需要一些“智能”和隐藏的字段/方法,那么它就变成了一个类。
答案 1 :(得分:6)
结构对POD(普通旧数据)封装特别有用。 struct vs class in C++
还有很多内容答案 2 :(得分:4)
在我看来,不,这不是一个坏主意。如果你打算以同样的方式使用一个类,比如
class Rectangle {
public:
int width;
int height;
};
然后你也可以使用struct
。这将有助于确保您不会忘记公开任何内容,如果您保持一致,那么未来的开发人员(包括未来的您)将会知道您纯粹将其视为数据对象,而不是在其中使用方法。< / p>
从所有可用性角度来看,它仍然是一个对象,所以不,它与OO设计没有冲突。
答案 3 :(得分:1)
如果您的应用需要它,请使用它。如果您的设计要求您拥有 公共成员,则可以使用struct
本身......
答案 4 :(得分:1)
我一直对像unary_function
这样的对象使用结构。在仅使用public
方法的类上明确声明operator()
毫无意义。此外,它并不像你邀请它继承。
答案 5 :(得分:1)
有时使用带有构造函数的类将比使用结构更低的性能效率,尤其是在数组周围复制大量数据时。原因是你可以安全地使用memcpy这样的函数在这个地方移动大块数据,而对于一个类你更有可能使用迭代器和/或复制construtor。
请参阅我的previous question进一步讨论。
答案 6 :(得分:1)
听起来,你拥有法拉利Scaglietti和Lamborgini Espada,有时你驾驶Ferarri,有时你驾驶兰博基尼...... 有时你使用struct,有时你使用class,有没有true和false?
答案 7 :(得分:1)
在C ++中使用struct没有任何问题,我倾向于避免使用类,除非我有足够的时间来计划它们的用途。
答案 8 :(得分:0)
我更喜欢类似结构的类。第一个原因是避免未初始化的结构。另一个原因是,如果需要,您将始终能够为结构添加任何便利方法。
答案 9 :(得分:-1)
我曾经做过以下事情:
struct Interface
{
virtual ~Interface() {}
virtual void foo() = 0;
};
class Implementation : public Interface
{
void foo(); // or public, it depends.
public:
Implementation(...);
};
因为默认情况下,接口将其所有成员都公开,默认情况下,实现将其成员设为私有。