首頁  >  文章  >  後端開發  >  C++ 函式繼承詳解:多態的本質是什麼?

C++ 函式繼承詳解:多態的本質是什麼?

WBOY
WBOY原創
2024-05-04 21:30:021051瀏覽

函數繼承概述:C 中函數繼承透過override關鍵字實現,允許子類別覆寫父類別函數,使多態成為可能,即物件在運行時表現出不同的行為,即使屬於同一父類別。

C++ 函数继承详解:多态的本质是什么?

C 函數繼承詳解:多型態的本質

在物件導向程式設計中,繼承是重要的機制,它允許子類別從父類別繼承資料成員和成員函數。函數繼承是指從父類別到子類別的成員函數的繼承。

多型態簡介

多型是物件導向程式設計中的關鍵概念,它允許物件在執行時間表現出不同的行為,即使它們屬於同一父類別。函數繼承是實現多態的一種方式。

函數繼承

在 C 中,函數繼承透過 override 關鍵字實作。當子類別定義了一個與父類別同名且具有相同簽名的函數時,該函數被標記為 override。這會告訴編譯器,子類別正在覆寫父類別的函數。

class Base {
public:
    virtual void print() {
        std::cout << "Base class" << std::endl;
    }
};

class Derived : public Base {
public:
    virtual void print() override {
        std::cout << "Derived class" << std::endl;
    }
};

在此範例中,Base 類別定義了一個print() 函數,而Derived 類別透過override 關鍵字覆寫了該函數。因此,當呼叫 Derived 類別物件的 print() 函數時,它將列印 "Derived class",而不是 "Base class"。

虛擬函數

override 函數必須是虛擬函數。虛擬函數透過 virtual 關鍵字聲明,它允許子類別覆寫父類別的函數。在上面的範例中,print() 函數是虛函數。

實戰案例

下面是一個示範函數繼承和多型的程式碼案例:

#include <iostream>

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

class Rectangle : public Shape {
public:
    double width, height;
    Rectangle(double w, double h) : width(w), height(h) {}
    double getArea() override { return width * height; }
};

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

int main() {
    Shape* shapes[] = {new Rectangle(2, 3), new Circle(4)};

    for (int i = 0; i < 2; i++) {
        std::cout << "Area of " << (i == 0 ? "Rectangle" : "Circle") << ": " << shapes[i]->getArea() << std::endl;
    }

    return 0;
}

在這個案例中,Shape 是形狀類別的基底類,它定義了一個純虛函數getArea()RectangleCircle 類別從 Shape 類別繼承,並覆寫​​了 getArea() 函數以計算各自的面積。

main() 函數中,使用多態,一個基底類別陣列被用來儲存 RectangleCircle 物件。由於 getArea() 函數被覆蓋,因此會根據物件類型列印正確的面積。

透過函數繼承和多態,我們可以建立具有不同行為的靈活和可擴展的程式。

以上是C++ 函式繼承詳解:多態的本質是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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