C++ 多態性允許物件以多種方式使用,透過虛擬函數和虛擬表實現。它使衍生類別物件的行為與基底類別不同:虛函數允許在衍生類別中覆寫基底類別函數。虛擬表保存指向虛擬函數位址的指針,根據物件類型動態尋找和呼叫適當的函數。實戰範例展示如何使用多態性建立動態物件集合,根據其類型調整行為,增強程式碼彈性。
C++ 中的多態性:實作彈性與可擴充性的利器
##概述
多態性是物件導向程式設計(OOP) 中的一項基本原則,允許物件以多種不同的方式被使用。它透過允許衍生類別物件的行為與它們的基底類別不同來實現這一點。實作多態性
在 C++ 中,可以透過使用虛函數和虛表來實現多態性。虛函數是允許在衍生類別中覆寫基底類別函數的函數。虛表是一個保存指向虛擬函數位址的指標的表。虛擬函數
class Base { public: virtual void display() { cout << "Base class display function" << endl; } }; class Derived : public Base { public: virtual void display() override { cout << "Derived class display function" << endl; } };
Base 類別的
display 函數是虛函數,在衍生類別
Derived 中被覆寫。
虛擬表
虛擬表包含指向Base 類別和
Derived 類別的
display 函數位址的指標:
class Base { public: virtual void display() { cout << "Base class display function" << endl; } }; class Derived : public Base { public: virtual void display() override { cout << "Derived class display function" << endl; } }; int main() { Base* ptr = new Derived(); // 指向 Derived 对象的 Base 类指针 ptr->display(); // 调用 Derived 类中的 display 函数 }
Base 類別指針,但該指標實際上指向派生類別
Derived 的一個物件。當呼叫
display 函數時,它會根據指向的實際物件類型動態尋找並呼叫適當的函數。
實戰案例:形狀類別層次結構
考慮一個形狀類別層次結構,其中有Shape 基底類別和
Circle 和
Rectangle 衍生類別。
Shape 類別具有計算面積的虛函數。
class Shape { public: virtual float area() = 0; // 纯虚函数 }; class Circle : public Shape { public: Circle(float radius) : mRadius(radius) {} float area() override { return 3.14 * mRadius * mRadius; } private: float mRadius; }; class Rectangle : public Shape { public: Rectangle(float width, float height) : mWidth(width), mHeight(height) {} float area() override { return mWidth * mHeight; } private: float mWidth; float mHeight; };
Shape 類別指標來儲存不同形狀物件的引用,並呼叫
area 函數以計算它們的面積:
int main() { Shape* shapes[] = {new Circle(5), new Rectangle(10, 5)}; for (Shape* shape : shapes) { cout << "Area: " << shape->area() << endl; } return 0; }
結論
C++ 中的多態性提供了極大的靈活性和可擴展性。它允許創建動態物件集合,這些物件的行為可以根據其實際類型進行調整。這使程式設計師能夠創建維護性更高、更易於擴展的程式碼。以上是C++ 中多態性如何幫助創建靈活且可擴展的程式碼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!