當衍生類別定義同名且實作不同的函數時,就會發生函數重寫。規則包括:使用 override 關鍵字。名稱、參數和傳回類型與基底類別函數相同。存取權限不得低於基底類別函數。透過重寫,衍生類別可以覆寫基底類別行為,實現多態,動態呼叫不同衍生類別的同名方法。
在C 中,函數重寫是一種透過繼承實現多態行為的關鍵特性。當衍生類別定義一個與其基底類別同名且具有不同實作的函數時,就會發生函數重寫。
為了重寫基底類別函數,衍生類別必須使用 override
關鍵字。例如:
class Base { public: virtual void print() { cout << "Base class print()" << endl; } }; class Derived : public Base { public: virtual void print() override { cout << "Derived class print()" << endl; } };
函數重寫的規則如下:
override
關鍵字。 考慮一個形狀抽象類別和它的兩個衍生類別矩形和圓。
class Shape { public: virtual double getArea() = 0; }; class Rectangle : public Shape { public: double width, height; Rectangle(double w, double h) : width(w), height(h) {} override double getArea() { return width * height; } }; class Circle : public Shape { public: double radius; Circle(double r) : radius(r) {} override double getArea() { return M_PI * radius * radius; } }; int main() { Rectangle rect(5, 3); Circle circle(4); Shape* shapes[] = {&rect, &circle}; for (auto shape : shapes) { cout << "Shape area: " << shape->getArea() << endl; } }
在這個範例中,Shape
類別定義了一個抽象方法getArea()
,由衍生類別Rectangle
和Circle
重寫以提供實際的面積計算。透過多態,我們可以使用 shapes
陣列中的基底類別指標來呼叫 getArea()
方法,從而動態地計算和輸出不同形狀的面積。
以上是C++ 函式重寫:揭開繼承中的行為覆蓋秘籍的詳細內容。更多資訊請關注PHP中文網其他相關文章!