首頁  >  文章  >  後端開發  >  C++ 中虛函數在多態性中扮演什麼角色?

C++ 中虛函數在多態性中扮演什麼角色?

王林
王林原創
2024-06-05 20:55:001103瀏覽

透過動態綁定實現多態性,虛函數允許衍生類別物件呼叫自身版本的虛函數,即使該函數由基底類別聲明。具體來說:虛函數在基底類別中聲明,並使用 virtual 關鍵字。編譯器使用虛擬指標表動態尋找執行時期物件類型的函數實作。衍生類別物件總是呼叫其自身版本的虛擬函數,即使它是由基底類別聲明的。

C++ 中虚函数在多态性中扮演什么角色?

虛函數在C++ 多態性中的角色

在物件導向程式設計(OOP) 中,多態性是一種允許物件以不同方式回應相同方法呼叫的特性。在 C++ 中,虛函數透過動態綁定實現多態性。

什麼是虛函數?

虛擬函數是基底類別中宣告並由衍生類別重寫的成員函數。在基底類別中宣告虛擬函數時,使用 virtual 關鍵字前綴。

虛擬函數的工作原理

當呼叫虛擬函數時,編譯器不會尋找基底類別中的函數實作。相反,它會查找運行時物件類型的函數實作。這意味著子類別物件始終呼叫其自身版本的虛擬函數,即使該函數是由基底類別聲明的。

虛擬指標表

虛函數呼叫涉及稱為虛指標表的特殊資料結構。對於每個具有虛擬函數的類,編譯器會建立一個虛指標表,其中包含指向該類虛擬函數的指標。當建立派生類別物件時,該物件包含指向其自身虛指標表的指標。

實戰案例

考慮以下範例:

class Shape {
public:
    virtual void draw() const = 0;
    // 其他函数和变量
};

class Rectangle : public Shape {
public:
    void draw() const override {
        // 绘制一个矩形
    }
};

class Circle : public Shape {
public:
    void draw() const override {
        // 绘制一个圆
    }
};

int main() {
    Shape* shapes[] = {new Rectangle(), new Circle()};
    for (Shape* shape : shapes) {
        shape->draw(); // 根据运行时类型调用正确的 draw() 方法
        delete shape;
    }
}

在這個範例中,Shape 類別宣告了一個虛函數draw()。衍生類別 RectangleCircle 重寫了 draw() 方法以提供針對特定形狀的自訂實作。在 main() 函數中,我們建立了一個形狀數組並對每個形狀呼叫 draw() 方法。儘管所有形狀都宣告為基底類別類型,但它們會根據實際運行時類型呼叫正確的 draw() 方法,從而演示了虛函數在 C++ 中實現多態性的作用。

以上是C++ 中虛函數在多態性中扮演什麼角色?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn