在 C++ 中,要實現多態,可以使用虛函數(virtual function)。虛函數是在基類中聲明的,可以在派生類中重寫(override)它。當通過基類指針或引用調用虛函數時,實際調用的函數是對象所指向對象的類中定義的版本。這就是動態綁定或多態的概念。
下面是一個簡單的示例,展示了如何使用虛函數實現多態:
#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 {
return 3.14 * radius * radius;
}
private:
double radius;
};
// 派生類 Rectangle,繼承自 Shape
class Rectangle : public Shape {
public:
// 重寫虛函數 area()
double area() const override {
return width * height;
}
private:
double width;
double height;
};
int main() {
// 使用基類指針指向派生類對象
Shape* shape1 = new Circle();
Shape* shape2 = new Rectangle();
// 通過基類指針調用虛函數 area(),實現多態
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
和兩個派生類 Circle
和 Rectangle
。基類中有一個虛函數 area()
,用于計算形狀的面積。派生類分別重寫了 area()
函數,以計算圓形和矩形的面積。
在 main()
函數中,我們使用基類指針 shape1
和 shape2
分別指向 Circle
和 Rectangle
對象。然后通過基類指針調用 area()
函數,實際調用的函數是對象所指向對象的類中定義的版本。這就是多態的體現。