如何實作C 中的多態和繼承特性?
在C 中,多態性和繼承是兩個重要的特性,能夠提高程式碼的可讀性和可重複使用性。本文將介紹如何在C 中實現多態性和繼承特性,並提供程式碼範例。
一、繼承特性
繼承是物件導向程式設計中的基本概念之一,它可以讓我們建立新的類,並從現有的類別中繼承屬性和方法。
在C 中,使用關鍵字「class」定義一個類,透過「:」操作符來實現繼承。當建立衍生類別時,可以選擇使用公有繼承、私有繼承或保護繼承。
程式碼範例:
#include <iostream> using namespace std; // 基类 class Shape { public: virtual float getArea() = 0; // 纯虚函数 }; // 派生类 class Rectangle : public Shape { public: float width; float height; float getArea() { return width * height; } }; int main() { Rectangle rect; rect.width = 10; rect.height = 5; float area = rect.getArea(); cout << "矩形的面积:" << area << endl; return 0; }
在上述程式碼中,我們建立了一個基底類別Shape,其中定義了一個純虛擬函數getArea()。然後,我們建立了一個衍生類別Rectangle,它繼承了Shape類別並實作了getArea()函數。在主函數中,我們建立了一個Rectangle對象,並計算了該矩形的面積。
二、多型特性
多型是指物件的不同表現形態,同一個函數可以根據不同物件的型別表現出不同的行為。在C 中,透過虛擬函數和基底類別的指標或引用來實現多態。
虛函數需要在基底類別中聲明,並在衍生類別中進行重寫。基底類別指標或引用指向衍生類別物件時,呼叫的是衍生類別中的函數。
程式碼範例:
#include <iostream> using namespace std; // 基类 class Shape { public: virtual float getArea() = 0; // 纯虚函数 }; // 派生类1 class Rectangle : public Shape { public: float width; float height; float getArea() { return width * height; } }; // 派生类2 class Circle : public Shape { public: float radius; float getArea() { return 3.14 * radius * radius; } }; int main() { Rectangle rect; rect.width = 10; rect.height = 5; Circle circle; circle.radius = 4; Shape* shape1 = ▭ // 基类指针指向派生类对象 Shape* shape2 = &circle; // 基类指针指向派生类对象 float area1 = shape1->getArea(); float area2 = shape2->getArea(); cout << "矩形的面积:" << area1 << endl; cout << "圆的面积:" << area2 << endl; return 0; }
在上述程式碼中,我們建立了兩個衍生類別Rectangle和Circle,它們都繼承自基底類別Shape,並實作了getArea()函數。在主函數中,我們使用基底類別指標shape1和shape2分別指向Rectangle和Circle對象,並透過它們呼叫getArea()函數來實現多態性。
總結:
透過繼承特性,我們可以在C 中建立具有共同屬性和方法的類,並且能夠實現程式碼的複用。透過多態特性,我們可以在基類指標或引用的情況下,根據實際物件的類型來呼叫對應的函數。這樣可以提高程式碼的靈活性和可擴充性。
以上是如何實作C++中的多型和繼承特性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!