多态性,向下转换和虚函数

时间:2014-06-28 00:08:23

标签: c++ polymorphism

我有这个代码用于将类更改为更面向对象的C ++类,IE:主循环中的更少调用。

class Shape abstract 
{
public:
    virtual bool Check_Collision(SDL_Point);
    virtual bool Check_Collision(SDL_Rect);
    virtual bool Check_Collision(Shape&);
protected:
};

class Adv_Object : public Object
{
public:
    Adv_Object(Shape *obj);
    virtual void Set_Shape(Shape* obj) { prec_area = obj; }
    virtual bool Check_Collision(SDL_Point);
    virtual bool Check_Collision(SDL_Rect);
    virtual bool Check_Collision(Shape&);
protected:
    Shape* prec_area; //Better Area Determination
};

其中Shape是纯粹的抽象类,并且由另一个类继承,IE:Circle。

class Circle : public Shape
{
  public:
   void Check_Collision(SDL_Point) override;
   void Check_Collision(SDL_Rect) override;
   void Check_Collision(Shape&) override;
};

当Circle被下载到Shape时,是否会调用虚函数的重载或调用抽象函数?

1 个答案:

答案 0 :(得分:1)

程序将使用运行时信息(所谓的“虚拟表”)来确定要调用的虚拟函数。这将完全忽略你的向下/向上转换,换句话说 - 将调用正确的重载函数。

作为旁注 - 如果你真的想要调用虚函数的特定“化身”,那么你必须使用明确的名称解析,如下所示:

Shape * c = new Circle;
c->Square::Check_Collision(...); // I hope you see the issues this maycause