[英]Polymorphism, Downcasting, and Virtual Functions
我有這段代碼可用於將類更改為面向對象的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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.