C語言實現偽面向對象
阿新 • • 發佈:2018-09-19
一個 語言 私有變量 UNC bsp alloc vat 私有 eat
【1】每一個C文件都是一個偽類,除了main()函數所在的C文件。
【2】在C文件頂部定義該偽類的結構體,結構體內其實並沒有必要使用函數指針來模擬成員函數。
struct fifo_t { uint8_t *buf; uint32_t size; uint32_t in; uint32_t out; };
【3】NEW。
通過類似的函數來創建新的偽類對象/實例。銷毀類似。
struct fifo_t * fifo_create(uint32_t size) { struct fifo_t * fifo = malloc(sizeof(struct fifo_t)); /*
do something */ return fifo; }
【4】私有函數前加static關鍵字
static void * __fifo_a_private_func(struct fifo_t *fifo,int arg)
【5】頭文件中只包含結構體聲明和函數的聲明,保護結構體內的【私有變量】不被直接讀寫。
struct fifo_t; struct fifo_t * fifo_create(uint32_t size); void fifo_destroy(struct fifo_t *fifo);/* some other functions */
【6】沒有繼承。
一般也不需要繼承,實在需要就換C++好了。
【7】只有一個對象/實例的情況。其實這種情況才比較常見,可以放棄*_create()和*_destroy()函數,頭文件中也只需要函數聲明,這樣更徹底地保護私有變量。整個C文件中只有一個有static前綴的結構體實例,函數中也很明顯的區分出函數內部的局部變量和本文件的全局變量(對象)。
struct transmit_t { int fd; /* */ }; static struct transmit_t transmit = { .fd= -1 }; int transmit_init() { transmit.fd = // some thing /* */ } void transmit_destroy() { /* */ }
/*
some function
*
C語言實現偽面向對象