首頁  >  文章  >  後端開發  >  C++ 函式重寫詳解:覆蓋父類別函式的奧妙

C++ 函式重寫詳解:覆蓋父類別函式的奧妙

王林
王林原創
2024-05-04 08:12:021178瀏覽

C 的函數重寫允許子類別覆蓋父類別的函數,提供自己的特定實作。子類別需要宣告一個與父類別同名、同參數類型的函數,並使用 override 關鍵字標記。重寫函數可以用於擴展父類別功能、為子類別提供特定實現,或提供抽象函數的具體實現。

C++ 函数重写详解:覆盖父类函数的奥妙

C 函數重寫詳解:覆寫父類別函數的奧妙

概述

函數重寫是C 物件導向程式設計中一項強大的特性,它允許子類別重新定義父類別中的函數。透過重寫,子類別可以覆蓋父類別的實現,提供自己的特定功能。

語法

要重寫函數,子類別需要宣告一個與父類別中同名、同參數類型的函數:

class Child : public Parent {
public:
    ReturnType overrideName(ParameterList) override;
};

其中:

  • override 關鍵字表示該函數重寫了父類別中的函數。
  • overrideName 是重寫函數的名稱。
  • ParameterList 是重寫函數的參數清單。
  • ReturnType 是重寫函數的回傳類型(可以與父類別函數不同)。

實戰案例

考慮一個形狀基底類別Shape,它包含一個計算面積的函數getArea()。子類別RectangleCircle 分別繼承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

在這個例子中,RectangleCircle 重寫了Shape 中的getArea() 函數,提供了各自的面積計算。父類別指標指向子類別物件時,重寫後的函數將被呼叫。

使用場景

函數重寫通常用於以下場景:

  • 當需要對父類別功能進行擴展或修改時。
  • 當需要為不同的子類別提供特定功能時。
  • 當需要在基底類別中提供抽象函數(純虛函數)的具體實作時。

注意事項

  • 重寫函數必須與父類別函數具有相同的簽章(名稱、參數類型、傳回型別)。
  • 對於虛擬函數,子類別重寫函數可以具有不同的存取修飾符(例如,可以將一個受保護的父類別函數重寫為公共的子類別函數)。
  • 一個子類別只能重寫父類別中的非靜態函數。
  • 重寫函數通常會使用 override 關鍵字進行標記,但這不是必要的。

以上是C++ 函式重寫詳解:覆蓋父類別函式的奧妙的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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