我不确定我是否像我喜欢的那样表达了我的问题,但我会举一个例子来澄清问题。
这是代码:
class Shape;
class Circle;
class Triangle;
class Shape
{
Shape(void);
~Shape(void);
virtual void DrawShape(void) = 0;
}
class Circle : public Shape
{
/* .... constructor/destructor defined normally .... */
bool TestIntersection(Triangle* _triangle);
bool TestIntersection(Circle* _circle);
void DrawShape(void);
}
/* main.cpp */
...
Shape* shape;
Shape* circle = new Circle;
if(a == 0)
{
shape = new Circle;
}
else
{
shape = new Triangle;
}
circle->TestIntersection(shape);
我得到的错误是没有可接受的从 Shape* 到 Circle* 或 Triangle* 的转换。
为什么会这样?或者我是否需要一种方法来确定已将哪个派生类设置为抽象类指针?