用C语言模拟实现C++多态

来源:互联网 发布:linux查看hba卡型号 编辑:程序博客网 时间:2024/06/04 18:14

c++的多态:
代码如下:

#include<iostream>using namespace std;class A{    virtual void fun()    {        cout << "A:fun()" << endl;    }    int a;};class B :public A{    virtual void fun()    {        cout << "B:fun()" << endl;    }    int b;};void test1()//测试代码{    A _a;    B _b;    A* p = &_a;    p->fun();    p = &_b;    p->fun();}int main()//主函数{    test1();    system("pause");    return 0;}

这里写图片描述

c语言模拟实现的多态:
代码如下:

typedef void(*FUN)();//函数指针struct _A//父类{    FUN _fun;//由于C语言中结构体不能包含函数,故只能用函数指针在外面实现父类的对象调用父类的同名函数    int _a;};struct _B//子类{    _A _a_;//在子类中定义一个基类的对象即可实现对父类的继承    int _b;};void _fA(){    printf("_A:_fun()\n");}void _fB(){    printf("_B:_fun()\n");}void test2(){    _A _a1;//父类创建_a1对象    _B _b1;//子类创建_b1对象    _a1._fun = _fA;//父类的对象调用父类的同名函数    _b1._a_._fun = _fB;//子类的对象调用子类的同名函数    _A* p2 = &_a1;//定义一个父类指针指向父类的对象    p2->_fun();//调用父类的同名函数    p2 = (_A*)&_b1;//让父类指针指向子类的对象,由于类型不匹配所以要进行强转    p2->_fun();//调用子类的同名函数}int main(){    test2();    system("pause");    return 0;}

这里写图片描述

0 0