【问题标题】:Link two objects in C++在 C++ 中链接两个对象
【发布时间】:2013-05-16 18:15:24
【问题描述】:

我要构造两个不同的类点和三角形?

类的实现是我将有一个点数组,然后我将创建一个三角形数组,因此数组中的每个三角形都将链接到数组中的三个点?

类三角形的最佳数据结构是什么?

编辑: 让我再解释一下: 我有一个名为 Apoints 的点数组,我想创建一个新的三角形对象数组。我想为每个三角形分配三个点。但是,例如,当我更改 Apoints 中的一个点时,应该对所有具有该点的三角形进行修改。

谢谢

【问题讨论】:

  • 您在问一个关于面向对象编程的非常基本的问题。你的问题几乎没有说明你事先做了什么研究。它尖叫着“我对编程老师的介绍要求我们这样做,请为我做这件事”你能用你在作业中遇到的更具体的问题来更新你的问题吗?
  • 我的兴趣是我已经有了点的对象。我想要一个新的三角形对象,其中包含我的点,而不为它分配新的内存。所以当我改变数组中的一个点时,所有有这个点的三角形都会直接改变。
  • 你应该阅读这个指针

标签: c++ class oop object


【解决方案1】:

另一种解决方案,这次是 C++11 方式:

class Triangle {
private:
    std::array<Point,3> m_points;

public:
    Triangle(const std::array<Point,3> & points): m_points(points) {}
};

【讨论】:

    【解决方案2】:

    这个怎么样?

    class Triangle {
        public:
            Triangle(Point corners[3]) : corners_(corners) {}       
        private:
            Point corners_[3];
    };
    

    根据您的评论,也许您会想要这样的东西来避免分配新内存,但同时要确保三角形只有三个点:

    class Triangle {
        public:
            Triangle(Point (&corners)[3]) : corners_(corners) {}
        private:
            Point (&corners_)[3];
    };
    

    一个小例子可能是这样的:http://ideone.com/3csNVq

    注意所有权和访问已删除的积分!

    【讨论】:

      【解决方案3】:

      怎么样:

      class Triangle
      {
         private:
            Point a;
            Point b;
            Point c;
      
         public:
            Triangle( Point pa, Point pb, Point pc );
      }
      

      这就是你要找的吗?

      【讨论】:

      • 我不想为 Triangle 类添加新变量。我只想使用对点的引用,所以当我有 PointA、PointB、PointC 和 PointD 时。和三角形A(点A,点B,点C)和三角形B(点B,点C,点D)。当我更改 PointB 时,两个三角形应该有相同的 PointB??
      • 使用指向点的指针而不是点,例如:Point* a 或者只将每个点的索引存储到点数组中,例如:int indexA。希望这很清楚。
      【解决方案4】:

      我会选择最简单的解决方案:

      class Triangle {
      private:
          std::vector<Point*> vertices;
      };
      

      【讨论】:

      • @Frecklefoot 我点击“答案”时没有看到你的答案,否则我只会投票给你:)
      • +1,不过您应该考虑将Vector 更改为std::vector。完成此操作后,该课程将成为 Polygon... 的理想候选人,其中三角形只有 3 分 :)
      • @Moo-Juice 感谢您的评论!添加标准
      【解决方案5】:

      如果三角形仅由点组成,则无需逐个链接元素。

      struct Point { double c[3]; };
      
      struct Triangle 
      { 
        Point p[3]; 
      };
      
      class Triangles
      {
      public:
        Triangles (Point * point_ptr, size_t const num_points)
          : points(point_ptr), size(num_points)
        { }
        Triangle operator[] (size_t const i)
        {
          size_t p_index = 3*i;
          if (p_index < size)
          {
            return *((Triangle*)points+p_index);
          }
        }
      private:
        Point * points;
        size_t size;
      };
      

      未经测试,但你可以这样做。

      【讨论】:

        猜你喜欢
        • 2017-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多