首頁 >後端開發 >C++ >C++ 函式重寫實戰:實作子類別專屬功能的妙招

C++ 函式重寫實戰:實作子類別專屬功能的妙招

WBOY
WBOY原創
2024-05-01 13:36:02928瀏覽

函數重寫允許子類別重新定義基底類別的同名函數,實現特定於子類別的功能:基於名稱查找和類型匹配,當子類別定義同名函數時,會重寫基底類別函數。這允許子類別提供不同的實現,例如範例中 Circle 和 Rectangle 類別重寫 Shape 類別的 area() 函數來計算其獨特的面積。

C++ 函数重写实战:实现子类专属功能的妙招

C 函數重寫:子類別專屬功能的實作

函數改寫是C 中重要的機制,它允許子類別重新定義基底類別中同名函數的行為。這對於定義特定於子類別的特定功能非常有用。

原理

函數重寫基於名稱查找和類型匹配規則。當呼叫函數時,編譯器會搜尋作用域中具有符合名稱的函數。如果找到多個重載函數,則使用最佳匹配原則進行選擇。

如果子類別定義了與基底類別同名的函數,則子類別中的函數將重寫基底類別中的函數。這允許子類別提供與基底類別不同的實作。

實戰案例

考慮一個場景,其中我們有一個 Shape 基類,表示一個通用形狀。衍生類別 CircleRectangle 分別表示圓形和矩形。我們需要計算這些形狀的面積。

基底類別Shape

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

衍生類別Circle

class Circle : public Shape {
public:
    Circle(double radius) : radius(radius) {}

    double area() const override {
        return M_PI * radius * radius;
    }

private:
    double radius;
};

衍生類別Rectangle

#
class Rectangle : public Shape {
public:
    Rectangle(double width, double height)
        : width(width), height(height) {}

    double area() const override {
        return width * height;
    }

private:
    double width, height;
};

使用

我們可以使用這些類別來計算不同形狀的面積:

int main() {
    Circle circle(5.0);
    Rectangle rectangle(3.0, 4.0);

    std::cout << "Area of circle: " << circle.area() << std::endl;
    std::cout << "Area of rectangle: " << rectangle.area() << std::endl;

    return 0;
}

輸出:

Area of circle: 78.5398
Area of rectangle: 12.0

在這個範例中, CircleRectangle 類別重寫了Shape 類別中定義的area() 函數。這允許我們實現每個形狀特有的面積計算邏輯。

以上是C++ 函式重寫實戰:實作子類別專屬功能的妙招的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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