首頁  >  文章  >  後端開發  >  C++ 虛擬函式與抽象基底類別:探究多型程式設計的基礎

C++ 虛擬函式與抽象基底類別:探究多型程式設計的基礎

WBOY
WBOY原創
2024-04-28 11:30:02354瀏覽

在 C 中,多態性透過虛擬函數和抽象基底類別實現。虛擬函數允許在衍生類別中覆寫基底類別函數,而抽象基底類別包含純虛函數,迫使衍生類別提供實作。這允許使用基類指標存取派生類對象,並根據對象的實際類型呼叫適當的方法,從而實現多態編程。

C++ 虚拟函数与抽象基类:探究多态编程的基础

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中文網其他相關文章!

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