溫馨提示×

C++靜態(tài)成員函數(shù)怎樣實現(xiàn)多態(tài)

c++
小樊
81
2024-11-09 03:08:31
欄目: 編程語言

在 C++ 中,要實現(xiàn)多態(tài),可以使用虛函數(shù)(virtual function)。虛函數(shù)是在基類中聲明的,可以在派生類中重寫(override)它。當通過基類指針或引用調(diào)用虛函數(shù)時,實際調(diào)用的函數(shù)是對象所指向?qū)ο蟮念愔卸x的版本。這就是動態(tài)綁定或多態(tài)的概念。

下面是一個簡單的示例,展示了如何使用虛函數(shù)實現(xiàn)多態(tài):

#include <iostream>

// 基類 Shape
class Shape {
public:
    // 虛函數(shù) area()
    virtual double area() const {
        return 0.0;
    }
};

// 派生類 Circle,繼承自 Shape
class Circle : public Shape {
public:
    // 重寫虛函數(shù) area()
    double area() const override {
        return 3.14 * radius * radius;
    }

private:
    double radius;
};

// 派生類 Rectangle,繼承自 Shape
class Rectangle : public Shape {
public:
    // 重寫虛函數(shù) area()
    double area() const override {
        return width * height;
    }

private:
    double width;
    double height;
};

int main() {
    // 使用基類指針指向派生類對象
    Shape* shape1 = new Circle();
    Shape* shape2 = new Rectangle();

    // 通過基類指針調(diào)用虛函數(shù) area(),實現(xiàn)多態(tài)
    std::cout << "Shape 1 area: " << shape1->area() << std::endl;
    std::cout << "Shape 2 area: " << shape2->area() << std::endl;

    delete shape1;
    delete shape2;

    return 0;
}

在這個示例中,我們定義了一個基類 Shape 和兩個派生類 CircleRectangle。基類中有一個虛函數(shù) area(),用于計算形狀的面積。派生類分別重寫了 area() 函數(shù),以計算圓形和矩形的面積。

main() 函數(shù)中,我們使用基類指針 shape1shape2 分別指向 CircleRectangle 對象。然后通過基類指針調(diào)用 area() 函數(shù),實際調(diào)用的函數(shù)是對象所指向?qū)ο蟮念愔卸x的版本。這就是多態(tài)的體現(xiàn)。

0