函數重寫允許子類別重新定義基底類別的同名函數,實現特定於子類別的功能:基於名稱查找和類型匹配,當子類別定義同名函數時,會重寫基底類別函數。這允許子類別提供不同的實現,例如範例中 Circle 和 Rectangle 類別重寫 Shape 類別的 area() 函數來計算其獨特的面積。
C 函數重寫:子類別專屬功能的實作
函數改寫是C 中重要的機制,它允許子類別重新定義基底類別中同名函數的行為。這對於定義特定於子類別的特定功能非常有用。
原理
函數重寫基於名稱查找和類型匹配規則。當呼叫函數時,編譯器會搜尋作用域中具有符合名稱的函數。如果找到多個重載函數,則使用最佳匹配原則進行選擇。
如果子類別定義了與基底類別同名的函數,則子類別中的函數將重寫基底類別中的函數。這允許子類別提供與基底類別不同的實作。
實戰案例
考慮一個場景,其中我們有一個 Shape
基類,表示一個通用形狀。衍生類別 Circle
和 Rectangle
分別表示圓形和矩形。我們需要計算這些形狀的面積。
基底類別Shape
class Shape { public: virtual double area() const = 0; // 纯虚函数 };
衍生類別Circle
class Circle : public Shape { public: Circle(double radius) : radius(radius) {} double area() const override { return M_PI * radius * radius; } private: double radius; };
衍生類別Rectangle
#class Rectangle : public Shape { public: Rectangle(double width, double height) : width(width), height(height) {} double area() const override { return width * height; } private: double width, height; };
使用
我們可以使用這些類別來計算不同形狀的面積:
int main() { Circle circle(5.0); Rectangle rectangle(3.0, 4.0); std::cout << "Area of circle: " << circle.area() << std::endl; std::cout << "Area of rectangle: " << rectangle.area() << std::endl; return 0; }
輸出:
Area of circle: 78.5398 Area of rectangle: 12.0
在這個範例中, Circle
和Rectangle
類別重寫了Shape
類別中定義的area()
函數。這允許我們實現每個形狀特有的面積計算邏輯。
以上是C++ 函式重寫實戰:實作子類別專屬功能的妙招的詳細內容。更多資訊請關注PHP中文網其他相關文章!