在 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
和兩個派生類 Circle
和 Rectangle
。基類中有一個虛函數(shù) area()
,用于計算形狀的面積。派生類分別重寫了 area()
函數(shù),以計算圓形和矩形的面積。
在 main()
函數(shù)中,我們使用基類指針 shape1
和 shape2
分別指向 Circle
和 Rectangle
對象。然后通過基類指針調(diào)用 area()
函數(shù),實際調(diào)用的函數(shù)是對象所指向?qū)ο蟮念愔卸x的版本。這就是多態(tài)的體現(xiàn)。