使用函数指针来实现继承和多态
#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;
}