首頁 > 後端開發 > C++ > 如何區分 C++ 中函式重載與重寫

如何區分 C++ 中函式重載與重寫

WBOY
發布: 2024-04-19 16:21:01
原創
1052 人瀏覽過

函數重載允許一個類別中具有同名但簽名不同的函數,而函數重寫發生在衍生類別中,當它覆蓋基底類別中具有相同簽名的函數,提供不同的行為。

如何区分 C++ 中函数重载和重写

C 中函數重載與重寫的差異

函數重載

函數重載允許在同一類別中使用相同名稱的不同函數,只要它們的簽名(參數類型和數量)不同。

語法:

return_type function_name(parameter_types) {
  // 函数体
}

// 另一个重载
return_type function_name(other_parameter_types) {
  // 另一个函数体
}
登入後複製

實戰案例:

考慮一個名為AreaCalculator 的類,它計算不同形狀的面積:

class AreaCalculator {
public:
  double Area(double radius) {
    return M_PI * radius * radius;
  }

  double Area(double length, double width) {
    return length * width;
  }

  double Area(int numOfSides, double sideLength) {
    // 正多边形的面积公式
    // ... 省略后面代码
  }
};
登入後複製

在這裡,Area 函數被重載以接收不同數量和類型的參數,允許根據形狀類型計算不同的面積。

函數重寫

函數重寫發生在衍生類別中,當它覆寫基底類別中具有相同簽名(名稱和參數類型)的函數時。衍生類別中的重寫函數的行為通常不同於基底類別中的函數。

語法:

class DerivedClass : public BaseClass {
public:
  // 重写基类中的函数
  return_type function_name(parameter_types) {
    // 重写的函数体
  }
};
登入後複製

實戰案例:

考慮一個名為Shape 的基類,它定義了一個Draw 函數來繪製形狀:

class Shape {
public:
  virtual void Draw() {
    // 绘制通用形状
    // ... 省略后面代码
  }
};
登入後複製

衍生類別Circle 可以重寫Draw 函數來專門繪製圓形:

class Circle : public Shape {
public:
  void Draw() override {
    // 绘制圆形
    // ... 省略后面代码
  }
};
登入後複製

透過重寫,Circle 類別的Draw 函數將覆蓋Shape 類別中的Draw 函數,並提供更具體的繪製實作。

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

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