C 中重載和覆蓋是不同的概念。重載允許建立同名函數,具有不同的參數列表,而覆蓋允許衍生類別函數覆蓋基底類別同名函數。在重載中,函數名稱相同,但參數清單不同,在覆蓋中,函數名稱和參數清單必須相同,且衍生類別函數必須使用 override 關鍵字。
C 函數的重載與覆寫
重載與覆寫
重載和覆蓋是C 中兩個不同的概念。重載允許建立同名但參數列表不同的函數,而覆寫允許衍生類別中的函數覆蓋基底類別中的同名函數。
重載
假定我們有一個名為area
的函數,它根據不同的輸入參數計算不同形狀的面積:
int area(int length, int width); // 矩形面积 double area(double radius); // 圆形面积
這些函數重載了area
名稱,因為它們有不同的參數清單。它們能夠處理不同類型的數據並執行不同的計算。
覆蓋
現在,假設我們有一個基底類別Shape
,它有一個area
虛擬函數:
class Shape { public: virtual double area() const = 0; };
我們可以建立衍生類別Rectangle
和Circle
,並覆寫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中文網其他相關文章!