2013-05-16 36 views
-3

我想构造两个不同的类点和三角形?在C++中链接两个对象

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

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

编辑: 让我来解释更多: 我有一个名为Apoints的点的数组,我想创建一个新的三角形对象数组。我想为每个三角形分配三个点。但是,例如,当我在Apoints中更改某个点时,还应在所有具有此点的三角形上执行修改。

谢谢

+3

你在问一个关于面向对象编程的基本问题。你的问题在你事先做过的研究中很少显示。它尖叫着“我的编程老师的介绍是要求我们这样做,请为我做”。您能否更新您的问题,并针对您的作业提出更具体的问题? – Boumbles

+1

我的兴趣是我已经有点的对象。我想要一个新的三角形对象,它包含我的点而不为它分配新的内存。所以当我改变数组中的一个点时,所有具有这个点的三角形都将被直接改变。 –

+0

你应该阅读关于这个 – Boumbles

回答

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

小心所有权和访问已删除的点虽然!

+0

是的,这就是我正在寻找的......谢谢 –

1

如何:

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

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

难道这就是你要找的人?

+0

的指针我不想有三角类的新变量。我只想使用参考点,所以当我有PointA,PointB,PointC和PointD。和三角A(点A,点B,点C)和三角B(点B,点C,点D)。当我改变PointB时,两个三角形应该有相同的PointB? –

+0

而不是点,使用指向点的指针,例如:'Point * a'或者只是将索引存储到每个点的Point数组中,例如:'int indexA'。希望这是明确的。 – Frecklefoot

1

我会用最简单的办法去:

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

这也适用。:) – Frecklefoot

+0

@Frecklefoot我没有看到你的答案,当我点击“答案”,否则我会刚刚投票你:) – GuLearn

+0

+1,但你应该考虑改变'矢量'为'std :: vector'。一旦你完成了这个任务,这个班会成为一个很好的候选人,成为一个“Polygon”......其中一个Triangle只有3分:) –

2

另一种解决方案,在C++ 11的方式这个时候:

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

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

+1为C++ 11的方式! – GuLearn

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

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