在C++中,虛函數(virtual function)允許我們在派生類中重寫基類中的函數。當使用繼承時,如果基類中的某個成員函數被聲明為虛函數,那么派生類中的同名函數將自動成為虛函數。這使得我們可以通過基類指針或引用來調用派生類中的實現,從而實現多態性。
以下是一個簡單的示例,展示了如何使用繼承和虛函數:
#include <iostream>
// 基類 Shape
class Shape {
public:
// 虛函數 area()
virtual double area() const {
return 0.0;
}
};
// 派生類 Circle,繼承自 Shape
class Circle : public Shape {
public:
// 重寫基類中的虛函數 area()
double area() const override {
double radius = 5.0; // 假設半徑為 5
return 3.14159 * radius * radius;
}
};
// 派生類 Rectangle,繼承自 Shape
class Rectangle : public Shape {
public:
// 重寫基類中的虛函數 area()
double area() const override {
double width = 4.0; // 假設寬度為 4
double height = 6.0; // 假設高度為 6
return width * height;
}
};
int main() {
// 使用基類指針指向派生類對象
Shape* shape_ptr = new Circle();
std::cout << "圓的面積: " << shape_ptr->area() << std::endl;
shape_ptr = new Rectangle();
std::cout << "矩形的面積: " << shape_ptr->area() << std::endl;
// 釋放內存
delete shape_ptr;
return 0;
}
在這個示例中,我們定義了一個名為Shape
的基類,其中包含一個虛函數area()
。然后,我們定義了兩個派生類Circle
和Rectangle
,分別表示圓形和矩形。這兩個派生類都重寫了基類中的area()
函數,以實現各自的面積計算。
在main()
函數中,我們使用基類指針shape_ptr
分別指向Circle
和Rectangle
對象,并通過基類指針調用area()
函數。由于area()
是虛函數,因此會根據實際對象類型調用相應的派生類實現。最后,我們輸出計算得到的面積。