C 的函數重寫允許子類別覆蓋父類別的函數,提供自己的特定實作。子類別需要宣告一個與父類別同名、同參數類型的函數,並使用 override 關鍵字標記。重寫函數可以用於擴展父類別功能、為子類別提供特定實現,或提供抽象函數的具體實現。
C 函數重寫詳解:覆寫父類別函數的奧妙
概述
函數重寫是C 物件導向程式設計中一項強大的特性,它允許子類別重新定義父類別中的函數。透過重寫,子類別可以覆蓋父類別的實現,提供自己的特定功能。
語法
要重寫函數,子類別需要宣告一個與父類別中同名、同參數類型的函數:
class Child : public Parent { public: ReturnType overrideName(ParameterList) override; };
其中:
override
關鍵字表示該函數重寫了父類別中的函數。 overrideName
是重寫函數的名稱。 ParameterList
是重寫函數的參數清單。 ReturnType
是重寫函數的回傳類型(可以與父類別函數不同)。 實戰案例
考慮一個形狀基底類別Shape
,它包含一個計算面積的函數getArea()
。子類別Rectangle
和Circle
分別繼承Shape
,需要提供自己的面積計算方法:
class Shape { public: virtual double getArea() = 0; }; class Rectangle : public Shape { public: Rectangle(double width, double height) : m_width(width), m_height(height) {} double getArea() override { return m_width * m_height; } private: double m_width; double m_height; }; class Circle : public Shape { public: Circle(double radius) : m_radius(radius) {} double getArea() override { return M_PI * m_radius * m_radius; } private: double m_radius; }; int main() { Shape* shapes[] = {new Rectangle(5, 10), new Circle(3)}; for (Shape* shape : shapes) { cout << "Area: " << shape->getArea() << endl; } return 0; }
輸出
Area: 50 Area: 28.2743
在這個例子中,Rectangle
和Circle
重寫了Shape
中的getArea()
函數,提供了各自的面積計算。父類別指標指向子類別物件時,重寫後的函數將被呼叫。
使用場景
函數重寫通常用於以下場景:
注意事項
override
關鍵字進行標記,但這不是必要的。 以上是C++ 函式重寫詳解:覆蓋父類別函式的奧妙的詳細內容。更多資訊請關注PHP中文網其他相關文章!