簡體   English   中英

多態性,向下轉換和虛函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM