我在设计一个允许我绘制各种形状的对象的类时遇到问题。
- 形状是基类
- 三角形、正方形、矩形是类的派生
Shape
类 - 我有一个
vector<Shape*> ShapeCollection
存储派生对象,即Triangle,Square, Rectangle
- 一旦我从矢量中选择了一个对象,我需要将对象绘制到屏幕上。
在这一点上,我被困在一个类的设计应该是什么,因为单个“绘图”类将进行绘图,消耗一个“形状”类的对象。由于向量将包含同一基类的不同对象Shape
。因为我有一个线程可以从向量中提取一个对象,一旦我有了一个对象,我必须能够正确地绘制它。
所以下面或多或少是我所说的
class Drawing
{
public:
void Draw(Shape* shape, string objectName)
{
// Now draw the object.
// But I need to know which Object I am drawing or use
// switch statements to identify somehow which object I have
// And then draw. I know this is very BAD!!!
// e.g.
switch(objectName)
{
case "rectangle":
DrawRectangle((Rectangle*) shape)
break;
//Rest of cases follow
}
}
}
我将有一个 DrawSquare、DrawTriangle 函数来进行绘图。
这一定是已经解决的问题。必须有更好的方法来做到这一点,因为所有这些 switch 语句都必须以某种方式消失!
非常感谢任何指导。
谢谢
@Adrian 和@Jerry 建议使用虚函数,我想到了,但我需要让我的绘图远离基类Shape