C語言實現僞面向對象

【1】每個C文件都是一個僞類,除了main()函數所在的C文件。函數

【2】在C文件頂部定義該僞類的結構體,結構體內其實並無必要使用函數指針來模擬成員函數。ui

struct fifo_t
{
    uint8_t        *buf;
    uint32_t    size;
    uint32_t    in;
    uint32_t    out;
};

【3】NEW。spa

經過相似的函數來建立新的僞類對象/實例。銷燬相似。指針

struct fifo_t * fifo_create(uint32_t size)
{
    struct fifo_t * fifo = malloc(sizeof(struct fifo_t));
    /*
    
do something */ return fifo; }

【4】私有函數前加static關鍵字code

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++好了。blog

【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 other function*/
相關文章
相關標籤/搜索