我应该在C ++中使用结构吗?

时间:2010-09-28 15:19:02

标签: c++ data-structures oop

在C ++中,struct和class之间的区别很小,基本上只有struct成员是默认的public,而class member是默认的私有。

但是,每当我需要纯数据结构时,我仍然会使用结构,例如:

struct Rectangle {
    int width;
    int height;
};

我觉得使用非常方便:

Rectangle r;
r.width = 20;
r.height = 10;

然而,数据结构来自程序编程,我正在进行面向对象的编程。将这个概念引入OO是不是一个坏主意?

10 个答案:

答案 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(...);
};

因为默认情况下,接口将其所有成员都公开,默认情况下,实现将其成员设为私有。