標籤:
#include <stdio.h>#include <stdlib.h>/* * * 1. 簡單實現類比虛函數表實現c語言物件導向的設計 * 2. 為實現: 函數註冊調用 * 3. 通過檔案實現函數註冊調用 *///封裝typedef struct _Shape Shape;//類比虛函數表struct ShapeClass{ void (*construct)(Shape* self); //建構函式 void (*destroy)(Shape* self); //解構函式 void (*draw)(Shape* self); //處理函數 };struct _Shape{ struct ShapeClass *kclass; int x,y;};//建構函式void Shape_construct(Shape* self){q self->x = 0; self->y = 0; printf("Shape construct\n");}//解構函式void Shape_destroy(Shape* self){ printf("shape destroy\n"); //to-do destroy self}void Shape_draw(Shape* self){ printf("draw:%d,%d\n",self->x,self->y); //to-do draw self}//聲明_shape_class, 即註冊虛函數表struct ShapeClass _shape_class={ Shape_construct, //函數名就是函數的地址 Shape_destroy, Shape_draw,};Shape* newShape(){ Shape* s = (Shape*)malloc(sizeof(Shape)); s->kclass = &_shape_class; s->kclass->construct(s); return s;}void deleteShape(Shape* shape){ shape->kclass->destroy(shape); free(shape);}int main(){ Shape* shape = newShape(); shape->kclass->draw(shape); deleteShape(shape);}
c語言物件導向編程