用C ++链接两个对象

时间:2013-05-16 18:15:24

标签: c++ class oop object

我想构建两个不同的点和三角形?

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

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

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

谢谢

5 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

怎么样:

class Triangle
{
   private:
      Point a;
      Point b;
      Point c;

   public:
      Triangle( Point pa, Point pb, Point pc );
}

这是你在找什么?

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

这个怎么样?

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

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

答案 4 :(得分:0)

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

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;
};

未经测试,但这就是你可以做到的方式。