C語言如何實現繼承和多型
阿新 • • 發佈:2019-01-21
使用函式指標來實現繼承和多型
#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;
}