我有这段代码可以将类更改为更面向对象的 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 时,是调用它的虚函数重载还是调用抽象函数?
最佳答案
程序将使用运行时信息(所谓的“虚拟表”)来确定调用哪个虚拟函数。这将完全无视您的向下/向上转换,换句话说 - 将调用正确的重载函数。
作为旁注 - 如果您真的想调用虚函数的特定“化身”,那么您必须使用显式名称解析,如下所示:
Shape * c = new Circle;
c->Square::Check_Collision(...); // I hope you see the issues this maycause
关于c++ - 多态、向下转型和虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24462349/