1. 程式人生 > >C語言如何實現繼承和多型

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; }