如何用C语言实现多态?

多态(Polymorphism)是指面向对象程序运行时,相同的消息可能会送给多个不同的类之对象,系统依据对象所属类,引发对应类的方法,而有不同的行为。

简单来说,所谓多态意指相同的消息给予不同的对象会引发不同的动作。在C语言中,可以通过结构体和指针来实现多态。

以下是通过结构体和指针实现多态的简单示例代码:

#include <stdio.h>  
  
// 定义基类  
struct Shape {  
    void (*draw)(struct Shape*) ;  
} ;  
  
// 定义派生类  
struct Circle {  
    struct Shape shape;  
    int radius;  
} ;  
  
struct Rectangle {  
    struct Shape shape;  
    int width;  
    int height;  
} ;  
  
// 派生类的绘制函数  
void drawCircle(struct Circle *circle) {  
    printf("Drawing a circle...\n") ;  
}  
  
void drawRectangle(struct Rectangle *rectangle) {  
    printf("Drawing a rectangle...\n") ;  
}  
  
int main() {  
    // 创建派生类对象  
    struct Circle circle = { .draw = drawCircle, .radius = 10 };  
    struct Rectangle rectangle = { .draw = drawRectangle, .width = 20, .height = 30 };  
  
    // 调用基类的绘制函数  
    circle.draw(&circle);  
    rectangle.draw(&rectangle);  
  
    return 0;  
}

在上面的示例中,我们定义了一个 ​​Shape​​​ 结构体作为基类,它包含一个指向 ​​draw​​​ 函数的指针。我们还定义了两个派生类 ​​Circle​​​ 和 ​​Rectangle​​​,它们都包含了一个继承自基类的 ​​Shape​​ 结构体。

在派生类中,我们实现了各自的绘制函数 ​​drawCircle​​​ 和 ​​drawRectangle​​​。在 ​​main​​​ 函数中,我们创建了 ​​Circle​​​ 和 ​​Rectangle​​​ 的对象,并将它们传递给基类的绘制函数 ​​draw​​。由于指向基类的指针可以指向派生类的对象,因此这种多态就实现了。

在运行时,程序会分别输出 "Drawing a circle..." 和 "Drawing a rectangle...",这表明不同的对象调用了不同的绘制函数。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值