存储对象后,如何从八边形矢量访问x或y变量。
我知道如何从lots_of_coordinates向量访问x和y,因为它只是lots_of_coordinates[0].x
,但我想从八边形向量中访问x和y。
public:
int x, y;
};
class OctagonBase {
public:
vector<Coordinate>coordinates;
Coordinate point1;
};
class Octagon : public OctagonBase {
public:
void Coordinates() {
point1.x = 30;
point1.y = 40;
coordinates.push_back(point1);
cout << coordinates[0].x;
}
};
int main() {
vector<Octagon*>octagons;
Octagon o;
o.Coordinates();
octagons.push_back(o);
//how do I access x from octagons?
}
编辑:
我已经使用octagons[0].point1.x;
并将其从vector<Octagon*>octagons
更改为vector<Octagon>octagons
。但是,有一种方法可以使用vector<Octagon*>octagons
。
如果我将int x和y更改为private,那么如果添加适当的setter和getter函数,它仍然可以工作吗?
答案 0 :(得分:1)
int main() {
vector<Octagon> octagons;
Octagon o;
o.setCoordinates();
octagons.push_back(o);
//how do I access x from octagons?
// either via an integer index
for(size_t i = 0; n < octagons.size(); ++i)
{
for(size_t j = 0; j < octagons[i].coordinates.size(); ++j)
{
std::cout << octagons[i].coordinates[j].x << '\n';
}
}
// or a range based for loop
for(auto& octagon : octagons)
{
for(auto& coord : octagon.coordinates)
{
std::cout << coord.x << '\n';
}
}
return 0;
}
尽管如此,通常来说,您通常希望在可能的情况下隐藏对内部数据的直接访问(以便公共界面描述操作)。通常,它使类更易于使用。
这不是我建议的方法,但是如果您想自己手动管理内存,则可以执行以下操作:
vector<Octagon*> octagons;
Octagon* ptr = new Octagon;
octagons.push_back(ptr);
octagons[0]->Coordinates();
只要确保记得再次释放它们即可。
for(auto ptr : octagons)
delete ptr;
Imho,尽管使用std::vector<Octagon>
会更好,因为内存是连续的,因此处理起来会更快。