C语言如何实现继承和多态

使用函数指针来实现继承和多态

#include <stdio.h>
#include <stdlib.h>
struct Base_Vptr //虚函数表
{
             void(*fun1)( void*);
             void(*fun2)( void*);
};
struct Base
{
             struct Base_Vptr* base_vptr; //指向虚函数表的指针
};
void BaseFun1()
{
            printf( "i am BaseFun1\n" );
}
void BaseFun2()
{
            printf( "i am BaseFun2\n" );
}
struct Base_Vptr base_table = { BaseFun1, BaseFun2 };
struct Base *newBase()//基类的构造函数
{
             struct Base*temp = ( struct Base*)malloc( sizeof( struct Base));
            temp->base_vptr = &base_table;
             return temp;
}
//派生类
struct Derived
{
             struct Base d; //继承Base
             int High;
};
void DerivedFun1()
{
            printf( "i am Derived Fun1\n" );
}
void DerivedFun2()
{
            printf( "i am Derived Fun2\n" );
}
struct Base_Vptr derived_table = { DerivedFun1, DerivedFun2 };
struct Derived *newDerived(int h )
{
             struct Derived *temp = ( struct Derived*)malloc( sizeof( struct Derived));
            temp->d.base_vptr=&derived_table;
            temp->High = h;
             return temp;
}
int main()
{
             struct Base*b = newBase();
            b->base_vptr->fun1(( void*)b);
            b->base_vptr->fun2(( void*)b);
             struct Derived*d = newDerived(2);
            b = ( struct Base*)d;
            b->base_vptr->fun1(( void*)b);
            b->base_vptr->fun2(( void*)b);
            system( "pause" );
             return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值