【发布时间】:2014-12-15 23:26:02
【问题描述】:
我有一个映射
map <ShapeType, vector <Shape *> > shapeMap;
然后我将随机形状插入到地图中。 我想将方法(绘制)用于映射值。当我遍历地图时,你如何做到这一点?
void RandomAttributes(Shape *shape);
// declare our objects, and pointers for downcasting
MyRect rObj, *rPtr;
MyTriangle tObj, *tPtr;
MyCircle cObj, *cPtr;
void main()
{
int shapes; // loop index
// seed the random number generator
srand((unsigned int)time(0));
// allow the user time to move the console window away
// from the FilledShapes window are
cout << "Move this window to the lower right of the screen, and press ENTER to continue:\n";
cin.get();
// define our array size
const int baseSize = 3;
// create an vector of base class pointers
vector <Shape *> baseShape(baseSize);
// initialize our vector of base class pointers
//initialize vector of shapes
baseShape[0] = &rObj; // a MyRect IS A Shape
baseShape[1] = &tObj; // a MyTriangle IS A Shape
baseShape[2] = &cObj; // a MyCircle IS A Shape
enum ShapeType {
MyRectangle = 0,
MyTriangle = 1,
MyCircle = 2
};
//map
map <ShapeType, vector <Shape *> > shapeMap;
for (int i = 0; i<PROGRAM_RUN; i++)
{
// clear the window
// note that I can use ANY instance of a MyRect
// object to clear the window
baseShape[0]->ClearScreen();
int rNum = rand() % 3;
//CREATING RANDOM SHAPES
// choose random parameters for each rectangle
RandomAttributes(baseShape[rNum]);
//insert shape
shapeMap.insert(pair<ShapeType, vector <Shape *>>(ShapeType(rNum), baseShape)) ;
}
for (map <ShapeType, vector <Shape *> >::iterator pos = shapeMap.begin(); pos != shapeMap.end(); ++pos)
{
//DOES NOT WORK
pos->second->Draw();
}
}
我目前的实现:
for (map <ShapeType, vector <Shape *> >::iterator pos = shapeMap.begin(); pos != shapeMap.end(); ++pos)
{
//DOES NOT WORK
pos->second->Draw();
}
}
如何遍历地图并使用draw方法如下: 我要实现的映射值如下:
//baseShape[0]->Draw();
//baseShape[1]->Draw();
//baseShape[2]->Draw();
如果我的地图数据类型是 baseShape 向量指针。
【问题讨论】:
标签: c++ oop pointers dictionary polymorphism