C 函數重載與重寫的實際應用案例
函數重載
#函數重載允許同一個函數名稱具有不同的實現,以處理不同類型或數量的參數。例如,我們可以建立一個列印不同類型資料的函數:
void print(int value) { cout << value << endl; } void print(double value) { cout << value << endl; } int main() { int num = 10; double number = 12.5; print(num); // 调用 print(int) print(number); // 调用 print(double) return 0; }
函數重寫
#函數重寫允許衍生類別中定義的函數與基底類別中具有相同名稱和參數類型的函數具有不同的實作。例如,我們有一個基底類別Shape
,其中定義了一個計算面積的函數:
class Shape { public: virtual double getArea() = 0; // 虚拟函数声明 };
子類別Rectangle
和Circle
覆寫了getArea
函數並提供了自己的實作:
class Rectangle: public Shape { public: double width, height; Rectangle(double width, double height) : width(width), height(height) {} double getArea() override { return width * height; } }; class Circle: public Shape { public: double radius; Circle(double radius) : radius(radius) {} double getArea() override { return 3.14 * radius * radius; } };
實戰案例
考慮以下範例,它使用函數重載和函數重寫來建立一個計算形狀面積的程式:
#include <iostream> using namespace std; // 基类 Shape class Shape { public: virtual double getArea() = 0; }; // 子类 Rectangle class Rectangle: public Shape { public: double width, height; Rectangle(double width, double height) : width(width), height(height) {} double getArea() override { return width * height; } }; // 子类 Circle class Circle: public Shape { public: double radius; Circle(double radius) : radius(radius) {} double getArea() override { return 3.14 * radius * radius; } }; // 函数重载用来打印不同类型数据的面积 void printArea(Shape *shape) { cout << "Area of the Shape: " << shape->getArea() << endl; } int main() { Rectangle rectangle(5, 10); Circle circle(2); printArea(&rectangle); printArea(&circle); return 0; }
在這個案例中,Shape
類別定義了一個虛擬的getArea
函數,由子類別Rectangle
和Circle
覆蓋。 printArea
函數使用函數重載來處理不同類型的 Shape
物件並列印它們的面積。
以上是C++ 函式重載與重寫的實際應用案例的詳細內容。更多資訊請關注PHP中文網其他相關文章!