首頁  >  文章  >  後端開發  >  C++ 函式的重載與覆蓋

C++ 函式的重載與覆蓋

王林
王林原創
2024-04-12 12:12:02933瀏覽

C 中重載和覆蓋是不同的概念。重載允許建立同名函數,具有不同的參數列表,而覆蓋允許衍生類別函數覆蓋基底類別同名函數。在重載中,函數名稱相同,但參數清單不同,在覆蓋中,函數名稱和參數清單必須相同,且衍生類別函數必須使用 override 關鍵字。

C++ 函数的重载和覆盖

C 函數的重載與覆寫

重載與覆寫

重載和覆蓋是C 中兩個不同的概念。重載允許建立同名但參數列表不同的函數,而覆寫允許衍生類別中的函數覆蓋基底類別中的同名函數。

重載

假定我們有一個名為area 的函數,它根據不同的輸入參數計算不同形狀的面積:

int area(int length, int width);  // 矩形面积
double area(double radius);  // 圆形面积

這些函數重載了area 名稱,因為它們有不同的參數清單。它們能夠處理不同類型的數據並執行不同的計算。

覆蓋

現在,假設我們有一個基底類別Shape,它有一個area 虛擬函數:

class Shape {
public:
    virtual double area() const = 0;
};

我們可以建立衍生類別RectangleCircle,並覆寫area 函數:

class Rectangle : public Shape {
public:
    double area() const override { return length * width; }
    int length, width;  // 矩形属性
};

class Circle : public Shape {
public:
    double area() const override { return Math.PI * radius * radius; }
    double radius;  // 圆形属性
};

在衍生類別中,我們透過override 關鍵字明確覆寫父類別的area 函數。覆蓋的函數必須具有與父函數相同的返回值類型和名稱。

實戰案例

我們建立一個程式來示範重載與覆寫:

#include <iostream>
#include <cmath>

using namespace std;

class Shape {
public:
    virtual double area() const = 0;
};

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

class Circle : public Shape {
public:
    double area() const override { return Math.PI * radius * radius; }
    double radius;
};

int main() {
    // 创建矩形对象
    Rectangle rectangle;
    rectangle.length = 5;
    rectangle.width = 3;

    // 创建圆形对象
    Circle circle;
    circle.radius = 2;

    // 计算并输出矩形和圆形的面积
    cout << "矩形面积:" << rectangle.area() << endl;
    cout << "圆形面积:" << circle.area() << endl;
}

輸出結果:

矩形面积:15
圆形面积:12.566370614359172

這個例子展示如何透過重載和覆蓋來建立具有不同功能的函數。

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

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