多态
时间: 2023-07-19 22:11:45 浏览: 111
多态是面向对象编程的一个重要特性,它允许在派生类中重写基类中的同名方法,并且在运行时根据对象的实际类型来选择正确的方法实现。多态性可以通过虚函数来实现。
在多态性的实现中,程序可以使用基类指针或引用指向派生类对象,并调用同名的虚函数。在运行时,程序会根据指针或引用指向的对象的实际类型来选择正确的函数实现。
例如,我们可以定义一个基类 `Shape` 和它的两个派生类 `Circle` 和 `Rectangle`,并在 `Shape` 类中声明一个虚函数 `draw()`,在派生类中重写 `draw()` 方法:
```c++
class Shape {
public:
virtual void draw() {
// 基类中的默认实现
}
};
class Circle : public Shape {
public:
void draw() override {
// 画圆形的实现
}
};
class Rectangle : public Shape {
public:
void draw() override {
// 画矩形的实现
}
};
```
现在,我们可以使用指向 `Shape` 类的指针或引用来指向 `Circle` 或 `Rectangle` 对象,并调用它们的 `draw()` 方法:
```c++
Shape* s1 = new Circle();
Shape* s2 = new Rectangle();
s1->draw(); // 调用 Circle 类中的 draw() 方法
s2->draw(); // 调用 Rectangle 类中的 draw() 方法
```
在这个例子中,`s1` 指向一个 `Circle` 对象,因此调用 `s1->draw()` 时会调用 `Circle` 类中的 `draw()` 方法。类似地,`s2` 指向一个 `Rectangle` 对象,因此调用 `s2->draw()` 时会调用 `Rectangle` 类中的 `draw()` 方法。
多态性让程序具有更高的灵活性和可扩展性,因为它允许我们在不改变基类代码的情况下增加新的派生类。
阅读全文