下面的代码表示多边形。我希望能够将一个点(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
答案 0 :(得分:1)
为多边形提供一个添加顶点的方法吗?
void Polygon::addVertex(const gVector3 &vec) {
vertices.push_back(vec);
}
答案 1 :(得分:0)
您有两个选择:
添加一个公共方法,将gVector3
推送给您in Mark H's answer
或
更改设计。将多边形设为struct
而不是class
,并以独立功能的形式提供绘图功能。
struct Polygon
{
std::vector <gVector3> vertices;
std::vector <gVector3> color;
};
void drawPolygon(const Polygon &p);
我发现您已经使用 getter和setter 直接访问数据,因此您也可以公开数据。 C ++支持对象对象编程,但只有在具有封装的某些功能时才应使用对象。