面向对象C编程--虚函数

在C语言中没有面向对象的概念,也没有原生的虚函数,但可以通过结构体和函数指针实现类似于虚函数的功能。

下面是一个简单的示例程序:

#include <stdio.h>

// 定义基类
typedef struct {
    void (*show)(void); // 声明虚函数
} Base;

// 定义派生类
typedef struct {
    Base base; // 派生类包含基类
    int num;
} Derived;

// 定义基类的虚函数实现
void base_show(void) {
    printf("This is the base class.\n");
}

// 定义派生类的虚函数实现
void derived_show(void) {
    printf("This is the derived class.\n");
}

int main() {
    Base *base_ptr;
    Derived derived;
    
    // 初始化基类指针
    base_ptr = &derived.base;
    
    // 设置基类的虚函数为派生类的虚函数
    base_ptr->show = derived_show;
    
    // 调用虚函数,输出 "This is the derived class."
    base_ptr->show();
    
    // 设置基类的虚函数为基类的虚函数
    base_ptr->show = base_show;
    
    // 调用虚函数,输出 "This is the base class."
    base_ptr->show();
    
    return 0;
}

在这个示例程序中,我们定义了一个 Base 结构体作为基类,它只有一个虚函数 show。我们还定义了一个 Derived 结构体作为派生类,它包含了一个 Base 类型的成员变量和一个整型 num。

我们在程序中定义了基类的虚函数实现 base_show 和派生类的虚函数实现 derived_show。在 main() 函数中,我们创建了一个派生类对象 Derived derived,并通过基类指针 base_ptr 引用该对象的基类部分。

我们通过将 base_ptr->show 设置为派生类的虚函数 derived_show 来重载基类的虚函数。这样,当我们调用 base_ptr->show() 时,会执行派生类的虚函数实现,输出 “This is the derived class.”。然后,我们又将 base_ptr->show 设置为基类的虚函数 base_show,使得再次调用 base_ptr->show() 时执行基类的虚函数实现,输出 “This is the base class.”。

总之,通过结构体和函数指针,我们可以模拟类的继承和虚函数的重载。

【最后一个bug】多平台都有更新和发布,大家可以一键三连,关注+星标,不错过精彩内容~
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值