C++類的繼承虛函數(shù)怎樣用

c++
小樊
81
2024-10-31 10:42:56
欄目: 編程語言

在C++中,虛函數(shù)(virtual function)允許我們?cè)谂缮愔兄貙懟愔械暮瘮?shù)。當(dāng)使用繼承時(shí),如果基類中的某個(gè)成員函數(shù)被聲明為虛函數(shù),那么派生類中的同名函數(shù)將自動(dòng)成為虛函數(shù)。這使得我們可以通過基類指針或引用來調(diào)用派生類中的實(shí)現(xiàn),從而實(shí)現(xiàn)多態(tài)性。

以下是一個(gè)簡(jiǎn)單的示例,展示了如何使用繼承和虛函數(shù):

#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 {
        double radius = 5.0; // 假設(shè)半徑為 5
        return 3.14159 * radius * radius;
    }
};

// 派生類 Rectangle,繼承自 Shape
class Rectangle : public Shape {
public:
    // 重寫基類中的虛函數(shù) area()
    double area() const override {
        double width = 4.0; // 假設(shè)寬度為 4
        double height = 6.0; // 假設(shè)高度為 6
        return width * height;
    }
};

int main() {
    // 使用基類指針指向派生類對(duì)象
    Shape* shape_ptr = new Circle();
    std::cout << "圓的面積: " << shape_ptr->area() << std::endl;

    shape_ptr = new Rectangle();
    std::cout << "矩形的面積: " << shape_ptr->area() << std::endl;

    // 釋放內(nèi)存
    delete shape_ptr;

    return 0;
}

在這個(gè)示例中,我們定義了一個(gè)名為Shape的基類,其中包含一個(gè)虛函數(shù)area()。然后,我們定義了兩個(gè)派生類CircleRectangle,分別表示圓形和矩形。這兩個(gè)派生類都重寫了基類中的area()函數(shù),以實(shí)現(xiàn)各自的面積計(jì)算。

main()函數(shù)中,我們使用基類指針shape_ptr分別指向CircleRectangle對(duì)象,并通過基類指針調(diào)用area()函數(shù)。由于area()是虛函數(shù),因此會(huì)根據(jù)實(shí)際對(duì)象類型調(diào)用相應(yīng)的派生類實(shí)現(xiàn)。最后,我們輸出計(jì)算得到的面積。

0