使用STD Vector类的Polygon类

时间:2014-02-09 22:36:36

标签: c++

下面的代码表示多边形。我希望能够将一个点(x,y,z的gvector3对象)推到矢量“顶点”上。我知道vector有一个push_back方法,但由于我已经将顶点声明为私有,我认为我不能调用vertices.push_back(gvector3 xyz)。有没有人对我如何实现这个有任何建议?

#ifndef POLYGON_H
#define POLYGON_H

#include <iostream>
#include <gvector3.h>
#include <vector>

class Polygon {

private:

   std::vector <gVector3> vertices;
   std::vector <gVector3> color;

public:

///----------------------------------------------------------------
/// Constructors
///----------------------------------------------------------------
/// Default constructor
Polygon();


///----------------------------------------------------------------
/// Getters and Setters
///----------------------------------------------------------------
/// Return vertex / reference to vertex at index
gVector3 operator[](unsigned int index) const;
gVector3 &operator[](unsigned int index);

///----------------------------------------------------------------
/// Draw Polygon
///----------------------------------------------------------------
void drawPolygon(const Polygon &p);

};

std::ostream &operator<<(std::ostream &o, const Polygon p);

#endif // POLYGON_H

2 个答案:

答案 0 :(得分:1)

为多边形提供一个添加顶点的方法吗?

void Polygon::addVertex(const gVector3 &vec) {
    vertices.push_back(vec);
}

答案 1 :(得分:0)

您有两个选择:

  1. 添加一个公共方法,将gVector3推送给您in Mark H's answer

  2. 更改设计。将多边形设为struct而不是class,并以独立功能的形式提供绘图功能。

     struct Polygon
     {
        std::vector <gVector3> vertices;
        std::vector <gVector3> color;
     };
    
     void drawPolygon(const Polygon &p);
    
  3. 我发现您已经使用 getter和setter 直接访问数据,因此您也可以公开数据。 C ++支持对象对象编程,但只有在具有封装的某些功能时才应使用对象。