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

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

WBOY
WBOY原創
2024-04-19 16:21:011017瀏覽

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

如何区分 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中文網其他相關文章!

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