多态如何实现
时间: 2023-07-19 10:05:58 浏览: 49
多态是面向对象编程中的一个重要概念,它可以实现代码的重用和扩展。
在实现多态时,我们需要使用继承和虚函数。具体步骤如下:
1. 定义一个基类(父类),其中包含虚函数。
2. 定义一个或多个派生类(子类),继承基类,并实现基类中的虚函数,可以对虚函数进行重写(override),也可以不进行重写。
3. 在使用时,可以使用基类类型的指针或引用指向派生类的对象,调用虚函数时会根据运行时的对象类型来确定调用哪个类的虚函数。
例如,我们定义一个形状类 Shape,其中包含一个纯虚函数 area(),然后定义两个派生类 Circle 和 Rectangle,分别实现 area() 函数。在使用时,我们可以定义一个 Shape 类型的指针,然后将其指向 Circle 或 Rectangle 对象,然后调用 area() 函数,会自动调用对应的子类的函数。这就是多态的实现。
下面是示例代码:
```
#include <iostream>
using namespace std;
class Shape {
public:
virtual float area() = 0; // 纯虚函数
};
class Circle : public Shape {
public:
float area() {
return 3.14 * r * r;
}
private:
float r = 5;
};
class Rectangle : public Shape {
public:
float area() {
return w * h;
}
private:
float w = 3, h = 4;
};
int main() {
Shape* shape; // 声明 Shape 类型的指针
Circle circle;
Rectangle rect;
shape = &circle; // 将指针指向 Circle 对象
cout << "Circle area: " << shape->area() << endl; // 调用 area() 函数,会自动调用 Circle 的 area() 函数
shape = ▭ // 将指针指向 Rectangle 对象
cout << "Rectangle area: " << shape->area() << endl; // 调用 area() 函数,会自动调用 Rectangle 的 area() 函数
return 0;
}
```
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)