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

来源:互联网 发布:刘远原画网络班 编辑:程序博客网 时间:2024/06/06 07:08

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

#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;}
原创粉丝点击