2014-02-09 29 views
0

下面的代碼表示一個多邊形。我希望能夠將一個點(x,y,z的gvector3對象)推送到矢量「頂點」上。我知道vector有一個push_back方法,但由於我已經將頂點聲明爲private,所以我不認爲我可以調用vertices.push_back(gvector3 xyz)。有沒有人對我如何實現這一點有任何建議?使用STD矢量類的多邊形類

#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

爲您的類實現一個['push_back'](http://en.cppreference.com/w/cpp/container/vector/push_back)(或其他更適當命名的)成員函數,然後調用'頂點。 push_back()' – Praetorian

回答

1

給你的多邊形添加頂點的方法嗎?

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

哦對,我忘記了我可以通過函數訪問私有域! – AmazingVal

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

我看到你已經提供了對數據的直接訪問你的getter和setter,所以你還不如讓數據公開。 C++支持對象對象編程,但只有當你有一些功能封裝時,你才應該使用對象。