您为什么要在课堂中使用结构?

时间:2019-03-01 02:42:07

标签: c++

做功课,我们刚上完课。考虑如何在我的作业中实现类,但说明中指出使用结构。 (它正在读取二进制文件并编辑信息)查看了我们在课堂上所做的一些事情之后,我可能不需要针对我的情况的课堂。但是现在我很好奇,为什么要在类中使用结构?当您只可以在类中设置数据成员时,为什么要使用结构?结构必须提供什么才能保证这样做?

2 个答案:

答案 0 :(得分:1)

将值放入内部struct而不是仅仅将它们声明为类的成员变量的主要好处是,您可以轻松地实例化该结构的多个实例,并引用一组每个结构中的变量具有单个指针或引用。

作为一个例子,这是一个3D玩具点数组的类的两种实现。第一个使用单独的成员变量,而第二个声明一个内部struct来表示一个Point对象。

请注意,在第一个实现中,RotatePoint()方法采用四个参数,而在seconds参数中仅采用两个参数。能够使用单个struct Point &参数(而不是三个单独的float &参数)引用Point既在运行时效率更高,也更不容易被程序员调用。

// implementation without an inner struct
class MyPointArray1
{
public:
  [...]

  void RotatePoints(float radians)
  {
     for (int i=0; i<POINTS_ARRAY_LENGTH; i++)
     {
        // Hazard here -- a tired programmer might specify arguments in the wrong order!
        RotatePoint(x[i], y[i], z[i], radians);
     }
  }

private:
  enum {POINTS_ARRAY_LENGTH = 100};

  float x[POINTS_ARRAY_LENGTH];
  float y[POINTS_ARRAY_LENGTH];
  float z[POINTS_ARRAY_LENGTH];

  void RotatePoint(float & x, float & y, float & z, float radians)
  {
     // [math to update the values of x, y, and z would go here]
  }
};

// implementation with an inner struct
class MyPointArray2
{
public:
  [...]

  void RotatePoints(float radians)
  {
     for (int i=0; i<POINTS_ARRAY_LENGTH; i++)
     {
        // It's pretty much impossible to get this wrong without provoking a compile-time error :)
        RotatePoint(points[i], radians);
     }
  }

private:
  enum {POINTS_ARRAY_LENGTH = 100};

  struct Point
  {
     float x;
     float y;
     float z;
  };

  struct Point points[POINTS_ARRAY_LENGTH];

  void RotatePoint(struct Point & pt, float radians)
  {
     // [math to update the values in (pt) would go here]
  }
};

答案 1 :(得分:0)

据我所知,当您只想在该类中创建对象时,可以在该类中实现一个结构。在类之外,您将无法创建该结构的对象。