首頁  >  文章  >  後端開發  >  C++ 函式重載與重寫中多態性的體現

C++ 函式重載與重寫中多態性的體現

PHPz
PHPz原創
2024-04-20 11:03:02577瀏覽

C 中的多態性:函數重載允許具有相同名稱但不同參數清單的多個函數,根據呼叫時的參數類型選擇執行的函數。函數重寫允許衍生類別重新定義基底類別中已存在的方法,從而實現不同類型的行為,具體取決於物件的類型。

C++ 函数重载和重写中多态性的体现

C 函數重載與重寫中多態性的體現

多態性是物件導向程式設計的關鍵概念之一。它允許不同類型(衍生類別)的物件對相同的函數呼叫做出不同的回應。 C 透過函式重載(overloading)和重寫(overriding)實現了多態性。

函數重載

函數重載是指具有相同名稱但不同參數清單的多個函數。編譯器將根據實際呼叫時的參數類型來選擇正確的函數。例如,以下程式碼重載了area() 函數,它可以計算圓或矩形的面積:

class Circle {
public:
    double area(double radius) {
        return 3.14159 * radius * radius;
    }
};

class Rectangle {
public:
    double area(double length, double width) {
        return length * width;
    }
};

#重寫

重寫是指派生類別中重新定義基底類別中已存在的方法。它允許派生類別提供自己的實現,從而實現不同類型的行為。例如,以下程式碼在衍生類別Square 中重寫了基底類別Rectanglearea() 方法來計算正方形的面積:

class Rectangle {
public:
    virtual double area(double length, double width) {
        return length * width;
    }
};

class Square : public Rectangle {
public:
    virtual double area(double side) override {
        return side * side;
    }
};

實戰案例

考慮一個圖形庫,其中有Shape 基底類別和CircleRectangleSquare 衍生類別。我們想要建立一個函數 draw() 來繪製不同的圖形。透過使用重載,我們可以提供不同的draw() 方法來處理每種形狀類型:

struct IShape {
    virtual void draw() = 0;
};

struct Circle : public IShape {
    void draw() override {
        // 代码绘制圆
    }
};

struct Rectangle : public IShape {
    void draw() override {
        // 代码绘制矩形
    }
};

struct Square : public Rectangle {
    void draw() override {
        // 代码绘制正方形
    }
};

在呼叫draw() 方法時,C 將根據實際物件的類型選擇正確的函數版本。這使我們可以編寫通用程式碼來處理不同類型的圖形,而無需顯式轉換或強制轉換。

以上是C++ 函式重載與重寫中多態性的體現的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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