我需要帮助开始这项任务。我有一个基类Shape
,派生类MyCircle
,MyRect
和MyTriangle
。
对于赋值,我需要随机生成形状并将它们存储到地图中。
这是我不明白的。它指出:地图中的键值将是形状类型,映射的值将是Shape指针的矢量。
我创建了Shape指针的向量,如下所示:
// define our array size
const int baseSize = 3;
// create an vector of base class pointers
vector <Shape *> baseShape(baseSize);
// declare our objects, and pointers for downcasting
MyRect rObj, *rPtr;
MyTriangle tObj, *tPtr;
MyCircle cObj, *cPtr;
// 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
但我不确定如何实现地图,更具体地说,我不明白为什么键值类型是Shape
。
如果我按照以下方式宣布地图
//map
map <Shape, vector <Shape *> > shapeMap;
地图可以这样做吗?
shapeMap[rObj] = baseShape[0];
shapeMap[rObj] = baseShape[0];
shapeMap[rObj] = baseShape[0];
shapeMap[rObj] = baseShape[0];
... 每种形状20次,具有不同属性的形状。
答案 0 :(得分:1)
我的解释是,对于形状类型,您可以创建类型的枚举,并将其用作关键字。
enum class ShapeType { circle, square, triangle };
map<ShapeType, vector<Shape*>> shapes;
shapes[ShapeType::circle].push_back( new MyCircle{} );
(上面的几行代码不会删除圆圈,除非这样做,否则会有内存泄漏。)
答案 1 :(得分:1)
地图中的键值将是形状类型
虽然我并不是100%肯定要求,但我认为这意味着你应该实现这样的枚举:
enum ShapeType {
Circle,
Rectangle,
Triangle
};
并声明你的地图:
map<ShapeType, vector <Shape *> > shapeMap;