在 C 中,多態性透過虛擬函數和抽象基底類別實現。虛擬函數允許在衍生類別中覆寫基底類別函數,而抽象基底類別包含純虛函數,迫使衍生類別提供實作。這允許使用基類指標存取派生類對象,並根據對象的實際類型呼叫適當的方法,從而實現多態編程。
多態性是物件導向程式設計(OOP )中的關鍵概念,它允許物件以不同的方式回應相同的訊息。在 C 中,我們使用虛擬函數和抽象基底類別來實現多態性。
定義:虛擬函數是基底類別中宣告但僅在衍生類別中實作的成員函數。當透過基底類別指標呼叫虛擬函數時,將呼叫派生類別的實作。
語法:
class Base { public: virtual void print() const; }; class Derived : public Base { public: virtual void print() const override; };
override
關鍵字顯示我們正在覆寫基底類別的虛擬函數。
定義:抽象基底類別是至少包含一個純虛函數的基底類別。純虛函數沒有定義,僅由衍生類別實作。
語法:
class Base { public: virtual void f() const = 0; };
考慮一個形狀層次結構,其中每個形狀類別都有計算其面積的area()
方法。
Base 類別Shape:
class Shape { public: virtual double area() const = 0; };
衍生類別Circle 與Rectangle:
class Circle : public Shape { public: Circle(double radius) : _radius(radius) {} double area() const override { return M_PI * _radius * _radius; } private: double _radius; }; class Rectangle : public Shape { public: Rectangle(double width, double height) : _width(width), _height(height) {} double area() const override { return _width * _height; } private: double _width, _height; };
主函數:
int main() { Shape* s1 = new Circle(5); Shape* s2 = new Rectangle(3, 4); std::cout << "Circle area: " << s1->area() << std::endl; std::cout << "Rectangle area: " << s2->area() << std::endl; return 0; }
輸出:
Circle area: 78.5398 Rectangle area: 12
以上是C++ 虛擬函式與抽象基底類別:探究多型程式設計的基礎的詳細內容。更多資訊請關注PHP中文網其他相關文章!