首頁 > 後端開發 > C++ > C++ 函式重載與重寫有何不同?

C++ 函式重載與重寫有何不同?

WBOY
發布: 2024-04-13 18:06:01
原創
882 人瀏覽過

C 函數重載與重寫:重載:同名函數有不同的參數類型或數量,編譯時選擇適當版本。重寫:衍生類別中與基底類別同名函數,覆蓋基底類別實現,提供衍生類別特定實作。重載特徵:參數類型或數量不同,編譯時綁定。重寫特徵:參數類型和數量相同,運行時綁定,需要繼承。

C++ 函数重载与重写有何区别?

C 函數重載與重寫:概念與差異

重載

  • 定義:相同函數名,但具有不同的參數類型或數量的函數。
  • 語意:編譯器在呼叫時會根據參數類型或數量選擇適當的函數版本。
  • 語法:
int sum(int a, int b);
double sum(double a, double b);
登入後複製

重寫

  • ##定義:派生類別中與基底類別具有相同名稱和簽名的函數。
  • 語意:衍生類別中重寫的函數將覆寫基底類別中的同名函數,從而提供衍生類別的特定實作。
  • 語法:
  • class Base {
    public:
        virtual int add(int a, int b);
    };
    
    class Derived : public Base {
    public:
        int add(int a, int b) override;
    };
    登入後複製

區別

特徵重載重寫存取層級公有或私有 公有或受保護繼承不需要需要##參數綁定作用域
#參數類型或數量不同參數類型和數量相同
編譯時運行時
同一類別內基底類別與衍生類別中
實戰案例

重載:

計算不同類型數字的和

#include <iostream>

using namespace std;

int sum(int a, int b) {
    return a + b;
}

double sum(double a, double b) {
    return a + b;
}

int main() {
    cout << "整数之和:" << sum(1, 2) << endl;
    cout << "浮点数之和:" << sum(1.5, 2.5) << endl;
    return 0;
}
登入後複製

重寫:

使用多態性計算各種形狀的面積

#include <iostream>

using namespace std;

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

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

    double area() override {
        return length * width;
    }

private:
    double length;
    double width;
};

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(5, 10), new Circle(4)};

    for (int i = 0; i < 2; i++) {
        cout << "面积:" << shapes[i]->area() << endl;
    }

    return 0;
}
登入後複製

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板