【问题标题】:Structs vs classes in C++ [duplicate]C ++中的结构与类[重复]
【发布时间】:2010-10-07 07:25:34
【问题描述】:

什么时候应该在 C++ 中使用结构而不是类,反之亦然?当一个成熟的类管理一些信息似乎有点过头但想要表明所包含的信息都是相关的时,我发现自己使用结构。我想知道有哪些好的指导方针可以判断一个比另一个更合适?

编辑: 在阅读问题提交后 Stack Overflow 指出的相关材料时发现了这些链接:

When should you use a class vs a struct in C++?
What are the differences between struct and class in C++?

【问题讨论】:

    标签: c++ class


    【解决方案1】:

    当您只需要一个没有需要保留的逻辑不变量的“东西桶”时,请使用结构。将类用于其他任何事情。

    另请参阅C++ FAQ says on the subject

    【讨论】:

      【解决方案2】:

      如果您需要控制对数据的访问,您应该使用类。如果您不关心谁在访问什么,以及他们在其中存储了什么,那么结构可能更合适。

      此外,如果您需要对数据本身的完整性进行任何检查,则使用类更合适。

      【讨论】:

      • 我在这个答案上发现了两个反对票,这对我来说看起来非常好。什么给了?
      • 击败我。我这里有什么问题吗?如果我完全错了,那么我真的很想知道如何......
      • 谢谢。我真的不在乎它是否是评分最高的答案;我只是想知道为什么它是错误的......显然,有两个人认为它是错误的。啊,好吧。
      【解决方案3】:

      为了保持一致性,我总是使用类,即使只是容器。它纯粹是一种风格选择,因为两者之间的差异可以忽略不计。

      【讨论】:

        【解决方案4】:

        C++ 中的结构是具有公共默认访问方法的类,因此从技术上讲,除了默认访问方法之外没有任何区别,您可以等效地使用两者。

        但还是有一些期望和自然倾向,部分原因是 C++ 中的结构来自 C。

        我的方法:如果它有任何私有数据、构造函数/析构函数或任何复杂的成员函数(不仅仅是在 set/get 时进行转换等),请使用类。

        【讨论】:

          【解决方案5】:

          就个人而言,当我只需要一个数据容器(没有成员函数)时,我会使用结构。 否则,我使用类。

          我唯一一次对该规则做出例外是如果我需要一个简单的函子:例如

          struct compare { bool operator() { ... } };
          sort(v.begin(), v.end(), compare());
          

          需要public: 标签只会使代码变得不必要。

          【讨论】:

          • 这几乎是 google c++ 指南。并不是说我在许多其他方面都遵循/喜欢他们的指导方针。
          【解决方案6】:
          【解决方案7】:

          类和结构的区别在于结构是变量组,类代表对象。对象具有属性和方法,并且是层次结构的一部分。

          如果您使用 C++ 来利用 OO 功能,最好使用更自然的类/对象。

          【讨论】:

          • 我见过的最佳答案“结构是变量组,类代表对象”
          【解决方案8】:

          我将结构用于不提供构造函数或运算符的简单类型容器。

          其他一切的类。

          【讨论】:

            【解决方案9】:

            从技术上讲,两者之间的唯一区别是结构是公共的:默认情况下,类是私有的:

            除此之外,没有技术上的区别。

            struct vs class 然后成为语言的纯粹表达细微差别。

            通常,您避免将复杂的方法放入结构中,并且大多数时候结构数据成员将保持公开。在你想要强制强封装的类中。

            struct = data 是公开的,带有非常简单的辅助方法

            class= 强封装,只能通过方法修改/访问数据

            【讨论】:

            • 但是,OP 要求提供指导,这取决于表达的细微差别。
            【解决方案10】:

            如果有方法,则使用类,如果没有,则使用结构。

            一个类应该隐藏它所有的内部结构,只暴露方法或属性。结构倾向于暴露其所有内部结构并且没有访问器方法。

            如果只有一位代码访问某些(相关)数据,那么结构可能是完全合理的。如果需要多位代码来修改数据,或者如果它有点复杂,那么类会是更好的选择。

            【讨论】:

              猜你喜欢
              • 2011-06-15
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-11-21
              • 2011-02-14
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多