プログラム全体に散在するランダムな量のポイントを作成するプログラムがあります。実行中に、各ポイントのオブジェクトを作成してベクトルに保存したいと思います。さまざまな属性を持つ Point クラスを作成しましたが、上記を実装する方法がわかりません。類似しているが同一ではない問題を扱う他の質問を見ると、ポインターが使用されますが、それらを実装する方法がわかりません。
質問する
141 次
3 に答える
1
あなたが本当に何を達成したいのかよくわかりませんが、これがあなたの助けになることを願っています。
オブジェクトを動的に作成するには、new
演算子を使用します。new
演算子は常にポインタを返します。
Point* pointObj = new Point();
コンストラクターを指定した場合、呼び出しはスタックでの通常の構築と非常によく似ています。
Point* pointObj = new Point(x,y);
std :: vectorは、実行時に(動的にヒープに)オブジェクトを格納しますが、オブジェクトを独自に作成するのではなく、単にコピーします。
std::vector<Point> vec; //if this object is destructed it contents are destructed aswell
Point pointObj(x,y); //point on stack; will get destructed if it gets out of scope
vec.push_back(pointObj) //copy pointObj to a dynamic location on the heap
于 2012-07-08T18:59:39.533 に答える
0
ここで、オブジェクトの作成に関連付けられた自動オブジェクト管理をお探しですか? もしそうなら、AbstractFactory がここであなたを助けることができます。ファクトリはオブジェクト(ポイント) を構成するためのメカニズムであることに加えて、オブジェクトの管理 (ベクトルでの管理など) を実行することもできます。
class Point {
friend class PointFactory;
Point(int _x, int _y) : x(_x), y(_y) { }
private:
~Point(); //destructor is private
int x, y;
}
class PointFactory {
public:
Point* createPoint() { //Creates random point
return createPoint(rand(), rand());
}
Point* createPoint(int x, int y) { //Creates specified point
Point* p = new Point(x, y);
points.push_back(p);
return p;
}
void deletePoint(Point *p) { //p not in use anymore
std::vector<Point*>::iterator it = std::find(objects.begin(), objects.end(), p);
if (it != objects.end()) {
objects.erase(it);
}
delete p;
}
private:
std::vector<Point*> objects;
}
int main(...) {
Point *p = pointFactory.createPoint(); //instead of new Point()
//use p
pointFactory.deletePoint(p); //p not in use anymore
return 0;
}
これがあなたが探しているものであることを願っています。
- アンクル・サトル
于 2012-07-08T19:47:59.133 に答える
0
さて、あなたの Point コンストラクターが取るパラメーターはわかりませんが、あなたの説明は、次のようなことをしたいように聞こえます:
std::vector<Point> MyGlobalPointList;
プログラム内には、次のいくつかがあります。
MyGlobalPointList.push_back(Point(x,y,color));
于 2012-07-08T18:55:36.323 に答える