首頁 >後端開發 >C++ >C++ 中繼承和多態性的實作機制是什麼?

C++ 中繼承和多態性的實作機制是什麼?

WBOY
WBOY原創
2024-06-01 20:52:00690瀏覽

C++ 中繼承和多態性的實作機制:繼承:透過繼承說明符實現,衍生類別繼承並擴展基底類別行為。多態性:透過虛函數表實現,基底類別指標動態呼叫衍生類別方法。實作案例:透過繼承和多態性,可以建立形狀類別層次結構並編寫函數計算任何形狀的總面積。

C++ 中继承和多态性的实现机制是什么?

C++ 中繼承和多型性的實作機制

繼承和多態性是C++ 中實作程式碼重用和動態綁定至關重要的特性。然而,理解其底層的實作機制對於寫出高效且健壯的程式碼非常重要。

實作機制

#1.繼承

繼承是一種建立一個新類別(衍生類別)的方式,該類別繼承並擴展了現有類別(基底類別)的行為。在 C++ 中,繼承透過 publicprotectedprivate 繼承說明符實作。

例如:

class Animal {
public:
    virtual void speak() { cout << "Animal sound" << endl; }
};

class Dog : public Animal {
public:
    void speak() override { cout << "Woof!" << endl; }
};

在這個範例中,Dog 類別繼承了Animal 基底類別的speak() 方法,並覆蓋了該方法以提供特定的行為。

2. 多態性

多態性是指在運行時根據物件的實際類型動態呼叫方法的能力。它使基類指標能夠存取派生類別物件中的方法。

C++ 中的多態性是透過虛擬函數表實現的。在編譯期間,為每個虛擬函數產生一個虛擬函數表條目。當基底類別指標呼叫虛擬函數時,它將尋找物件的虛擬函數表,然後呼叫對應的方法。

例如:

Animal* animal = new Dog();
animal->speak(); // 输出: "Woof!"

儘管animal 指向的是Animal 基類,但由於多態性,它將呼叫Dog 物件中的speak() 方法。

實戰案例

考慮一個形狀類別層次結構,包含Shape 基底類別和CircleSquare Triangle 衍生類別。

class Shape {
public:
    virtual double area() = 0;
};

class Circle : public Shape {
public:
    double area() override { return 3.14 * radius * radius; }
};

class Square : public Shape {
public:
    double area() override { return side * side; }
};

class Triangle: public Shape {
public:
    double area() override { return 0.5 * base * height; }
};

透過使用繼承和多態性,我們可以寫一個 calculateTotalArea() 函數,該函數可以計算任何形狀的總面積:

double calculateTotalArea(vector<Shape*>& shapes) {
    double totalArea = 0;
    for (Shape* shape : shapes) {
        totalArea += shape->area();
    }
    return totalArea;
}

以上是C++ 中繼承和多態性的實作機制是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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