什么是多态,用c语言举例
时间: 2023-08-15 13:13:13 浏览: 85
一个经典c#多态的范例
多态是面向对象编程中的一个概念,它允许不同的对象对同一消息做出不同的响应。简单来说,就是同一种操作作用于不同的对象上面,可以产生不同的执行结果。在C语言中,由于其不是面向对象编程语言,没有内置的多态机制,但是可以通过函数指针实现类似多态的效果。
举个例子,假设有一个图形类,包括圆形和矩形两种子类,它们都有计算面积的方法。我们可以定义一个函数指针,指向这个方法,然后让不同的对象调用这个函数指针,就可以实现对不同对象的多态操作。
```c
#include <stdio.h>
// 定义图形类
typedef struct {
int type; // 1表示圆形,2表示矩形
union {
struct {
int r; // 圆半径
} circle;
struct {
int w; // 矩形宽度
int h; // 矩形高度
} rectangle;
} data;
} Shape;
// 计算圆形面积的函数
int calcCircleArea(Shape* shape) {
int r = shape->data.circle.r;
return 3.14 * r * r;
}
// 计算矩形面积的函数
int calcRectangleArea(Shape* shape) {
int w = shape->data.rectangle.w;
int h = shape->data.rectangle.h;
return w * h;
}
int main() {
Shape s1 = {1, {{5}}}; // 圆形,半径为5
Shape s2 = {2, {{3, 4}}}; // 矩形,宽度为3,高度为4
int (*calcArea)(Shape*) = NULL; // 定义函数指针
calcArea = calcCircleArea; // 指向计算圆形面积的函数
printf("圆形面积为:%d\n", calcArea(&s1)); // 调用函数指针,输出圆形面积
calcArea = calcRectangleArea; // 指向计算矩形面积的函数
printf("矩形面积为:%d\n", calcArea(&s2)); // 调用函数指针,输出矩形面积
return 0;
}
```
上面的代码中,我们通过定义一个函数指针`calcArea`来实现不同对象的多态操作,它可以指向不同的计算面积的方法。当它指向`calcCircleArea`时,调用`s1`的`calcArea`方法就相当于调用了`calcCircleArea`方法,计算出圆形的面积;当它指向`calcRectangleArea`时,调用`s2`的`calcArea`方法就相当于调用了`calcRectangleArea`方法,计算出矩形的面积。
阅读全文