首頁  >  文章  >  後端開發  >  C++ 虛擬函式與動態調派:瞭解執行階段方法呼叫的機制

C++ 虛擬函式與動態調派:瞭解執行階段方法呼叫的機制

王林
王林原創
2024-04-28 18:03:01756瀏覽

虛擬函數允許衍生類別重寫基底類別方法,動態調派則根據物件類型在執行時決定要呼叫哪個函數。具體步驟包括:透過 virtual 聲明虛擬函數,允許衍生類別重寫。在衍生類別中重寫虛擬函數,提供特定實作。使用物件的指標或參考呼叫虛擬函數,編譯器將在執行時間根據物件類型在虛擬函數表中尋找並執行正確的函數。

C++ 虚拟函数与动态调派:理解运行时方法调用的机制

C 虛擬函數與動態調派:瞭解執行階段方法呼叫的機制

##引言

虛擬函數是C 中一個強大的特性,允許在衍生類別中重寫基底類別的方法。本文將深入探討虛擬函數和動態調派的機制,並透過實戰案例進行示範。

虛擬函數

虛擬函數是透過在函數宣告前面加上

virtual 關鍵字宣告的。這表明該函數可以在衍生類別中被重寫。當呼叫一個物件上的虛擬函數時,實際呼叫的函數是根據程式運行時的物件類型決定的。

動態調派

動態調派是使用虛擬函數的一種機制,它允許在運行時確定要呼叫的函數。當呼叫一個物件的虛擬函數時,編譯器會在物件所屬類別的虛擬函數表中尋找該函數,並執行找到的函數。

實戰案例

以下是一個示範虛擬函數和動態調派的實戰案例:

#include <iostream>

class Shape {
public:
    virtual double area() = 0; // 纯虚函数
};

class Rectangle : public Shape {
public:
    Rectangle(double width, double height) : _width(width), _height(height) {}
    double area() override { return _width * _height; }

private:
    double _width;
    double _height;
};

class Circle : public Shape {
public:
    Circle(double radius) : _radius(radius) {}
    double area() override { return 3.14 * _radius * _radius; }

private:
    double _radius;
};

int main() {
    Shape* shapes[] = { new Rectangle(2, 3), new Circle(4) };
    for (Shape* shape : shapes) {
        std::cout << shape->area() << std::endl; // 动态调派
    }
    return 0;
}

在這個範例中,

Shape 是一個抽象基底類,它有一個純虛函數area()RectangleCircle 是衍生類,實作了 area() 函數並提供了不同的實作。在 main 函數中,我們建立了一個 Shape 指標陣列。雖然這些指標指向不同的類型,但我們能夠透過該數組統一呼叫 area() 函數,編譯器會根據運行時的類型在適當的衍生類別中執行正確的函數。

結論

虛擬函數和動態調派是 C 中強大的機制,它們允許靈活地呼叫方法並實現運行時多態性。理解這些機制對於編寫健全且可擴展的程式碼至關重要。

以上是C++ 虛擬函式與動態調派:瞭解執行階段方法呼叫的機制的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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