c語言物件導向編程

來源:互聯網
上載者:User

標籤:

#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語言物件導向編程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.