函數繼承概述:C 中函數繼承透過override關鍵字實現,允許子類別覆寫父類別函數,使多態成為可能,即物件在運行時表現出不同的行為,即使屬於同一父類別。
在物件導向程式設計中,繼承是重要的機制,它允許子類別從父類別繼承資料成員和成員函數。函數繼承是指從父類別到子類別的成員函數的繼承。
多型是物件導向程式設計中的關鍵概念,它允許物件在執行時間表現出不同的行為,即使它們屬於同一父類別。函數繼承是實現多態的一種方式。
在 C 中,函數繼承透過 override
關鍵字實作。當子類別定義了一個與父類別同名且具有相同簽名的函數時,該函數被標記為 override
。這會告訴編譯器,子類別正在覆寫父類別的函數。
class Base { public: virtual void print() { std::cout << "Base class" << std::endl; } }; class Derived : public Base { public: virtual void print() override { std::cout << "Derived class" << std::endl; } };
在此範例中,Base
類別定義了一個print()
函數,而Derived
類別透過override
關鍵字覆寫了該函數。因此,當呼叫 Derived
類別物件的 print()
函數時,它將列印 "Derived class",而不是 "Base class"。
override
函數必須是虛擬函數。虛擬函數透過 virtual
關鍵字聲明,它允許子類別覆寫父類別的函數。在上面的範例中,print()
函數是虛函數。
下面是一個示範函數繼承和多型的程式碼案例:
#include <iostream> class Shape { public: virtual double getArea() = 0; }; class Rectangle : public Shape { public: double width, height; Rectangle(double w, double h) : width(w), height(h) {} double getArea() override { return width * height; } }; class Circle : public Shape { public: double radius; Circle(double r) : radius(r) {} double getArea() override { return 3.14 * radius * radius; } }; int main() { Shape* shapes[] = {new Rectangle(2, 3), new Circle(4)}; for (int i = 0; i < 2; i++) { std::cout << "Area of " << (i == 0 ? "Rectangle" : "Circle") << ": " << shapes[i]->getArea() << std::endl; } return 0; }
在這個案例中,Shape
是形狀類別的基底類,它定義了一個純虛函數getArea()
。 Rectangle
和 Circle
類別從 Shape
類別繼承,並覆寫了 getArea()
函數以計算各自的面積。
在 main()
函數中,使用多態,一個基底類別陣列被用來儲存 Rectangle
和 Circle
物件。由於 getArea()
函數被覆蓋,因此會根據物件類型列印正確的面積。
透過函數繼承和多態,我們可以建立具有不同行為的靈活和可擴展的程式。
以上是C++ 函式繼承詳解:多態的本質是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!