确定指向抽象类的指针所在的派生类

时间:2012-07-05 11:32:29

标签: c++ class abstract-class derived-class

我不确定我是否也喜欢我的问题,但我会举一个例子来澄清事情。

以下是代码:

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 *。

为什么会这样?或者我是否需要一种方法来确定哪个派生类已设置为抽象类指针?

3 个答案:

答案 0 :(得分:4)

你需要的是这个:

我注意到您没有从Shape派生所谓的派生类。修复它也。也就是说,TriangleCircle应该来自Shape。之后,阅读有关访客模式,其各种实现和用法。这将有助于您解决问题。

答案 1 :(得分:0)

您的Circle课程似乎并未继承Shape

试试这个:

class Circle : Shape
{

}

答案 2 :(得分:0)

这种情况正在发生,因为您实际上并非来自Shape。

class Circle: public Shape {
...
};