C语言模拟实现C++的继承多态

C++的三大特性:封装、继承、多态,这些是C语言没有的,C++用class类实现了这三个特性,而C语言只有struct结构体,那么,如何用C语言模拟实现C++的继承和多态呢?

我们先要清楚继承和多态的概念。

继承:允许派生类在基类原有特性的基础上扩展,增加派生类特有成员。

多态:通过虚函数指针指向虚表中不同类中的同名函数。

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using  namespace std;

typedef void(*Fun) ();//C语言结构体中不能包含成员函数,所以在结构体外定义函数指针
struct AA
{
    Fun _fun;
    int  _a;
};

struct BB
{
    AA  a;//定义AA结构体对象实现继承
    int _b;
};

void funA()
{
    printf("funA()\n");
}

void funB()
{
    printf("funB()\n");
}

int main()
{
    AA aa;
    BB bb;
    aa._fun = funA;
    bb.a._fun = funB;

    AA *p = &aa;//定义AA的对象指针
    p->_fun();
    p = (AA*)&bb;//父类指针指向子类对象
    p->_fun();//实现多态
    system("pause");
    return 0;
}

这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值