C 中的多態性:函數重載允許具有相同名稱但不同參數清單的多個函數,根據呼叫時的參數類型選擇執行的函數。函數重寫允許衍生類別重新定義基底類別中已存在的方法,從而實現不同類型的行為,具體取決於物件的類型。
C 函數重載與重寫中多態性的體現
多態性是物件導向程式設計的關鍵概念之一。它允許不同類型(衍生類別)的物件對相同的函數呼叫做出不同的回應。 C 透過函式重載(overloading)和重寫(overriding)實現了多態性。
函數重載
函數重載是指具有相同名稱但不同參數清單的多個函數。編譯器將根據實際呼叫時的參數類型來選擇正確的函數。例如,以下程式碼重載了area()
函數,它可以計算圓或矩形的面積:
class Circle { public: double area(double radius) { return 3.14159 * radius * radius; } }; class Rectangle { public: double area(double length, double width) { return length * width; } };
#重寫
重寫是指派生類別中重新定義基底類別中已存在的方法。它允許派生類別提供自己的實現,從而實現不同類型的行為。例如,以下程式碼在衍生類別Square
中重寫了基底類別Rectangle
的area()
方法來計算正方形的面積:
class Rectangle { public: virtual double area(double length, double width) { return length * width; } }; class Square : public Rectangle { public: virtual double area(double side) override { return side * side; } };
實戰案例
考慮一個圖形庫,其中有Shape
基底類別和Circle
、Rectangle
和Square
衍生類別。我們想要建立一個函數 draw()
來繪製不同的圖形。透過使用重載,我們可以提供不同的draw()
方法來處理每種形狀類型:
struct IShape { virtual void draw() = 0; }; struct Circle : public IShape { void draw() override { // 代码绘制圆 } }; struct Rectangle : public IShape { void draw() override { // 代码绘制矩形 } }; struct Square : public Rectangle { void draw() override { // 代码绘制正方形 } };
在呼叫draw()
方法時,C 將根據實際物件的類型選擇正確的函數版本。這使我們可以編寫通用程式碼來處理不同類型的圖形,而無需顯式轉換或強制轉換。
以上是C++ 函式重載與重寫中多態性的體現的詳細內容。更多資訊請關注PHP中文網其他相關文章!