gpt4 book ai didi

c++ - 多态、向下转型和虚函数

转载 作者:太空宇宙 更新时间:2023-11-04 11:31:47 26 4
gpt4 key购买 nike

我有这段代码可以将类更改为更面向对象的 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com