函數重載允許一個類別中具有同名但簽名不同的函數,而函數重寫發生在衍生類別中,當它覆蓋基底類別中具有相同簽名的函數,提供不同的行為。
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中文網其他相關文章!