首頁  >  文章  >  後端開發  >  C++ 函式重寫:揭開繼承中的行為覆蓋秘籍

C++ 函式重寫:揭開繼承中的行為覆蓋秘籍

WBOY
WBOY原創
2024-04-30 15:12:02835瀏覽

當衍生類別定義同名且實作不同的函數時,就會發生函數重寫。規則包括:使用 override 關鍵字。名稱、參數和傳回類型與基底類別函數相同。存取權限不得低於基底類別函數。透過重寫,衍生類別可以覆寫基底類別行為,實現多態,動態呼叫不同衍生類別的同名方法。

C++ 函数重写:揭开继承中的行为覆盖秘籍

C 函數重寫:揭開繼承中的行為覆蓋秘籍

在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(),由衍生類別RectangleCircle 重寫以提供實際的面積計算。透過多態,我們可以使用 shapes 陣列中的基底類別指標來呼叫 getArea() 方法,從而動態地計算和輸出不同形狀的面積。

以上是C++ 函式重寫:揭開繼承中的行為覆蓋秘籍的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn