使用 STD 向量类的多边形类

Polygon class using the STD Vector class

本文关键字:多边形 向量 STD 使用      更新时间:2023-10-16

下面的代码表示一个多边形。我希望能够将一个点(x,y,z 的 gvector3 对象)推到向量"顶点"上。我知道向量有一个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

为您的多边形提供添加顶点的方法?

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

您有 2 个选择:

  1. 添加一个公共方法,它将为您推送gVector3,如 Mark H 的答案所示

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

     struct Polygon
     {
        std::vector <gVector3> vertices;
        std::vector <gVector3> color;
     };
     void drawPolygon(const Polygon &p);
    

我看到您已经通过您的 getter 和 setter 提供了对数据的直接访问,因此您不妨公开数据。C++支持对象对象编程,但仅当要封装某些功能时才应使用对象。