面向?qū)ο缶幊淌且环N思想,并非一定要用哪種語言去實(shí)現(xiàn),c語言也可以實(shí)現(xiàn)面向?qū)ο缶幊?。通過結(jié)構(gòu)體和指針就可以實(shí)現(xiàn)。
C語言實(shí)現(xiàn)各部分功能
面向?qū)ο笾饕挠?a class="article-link" target="_blank" href="/baike/492719.html">封裝、繼承、多態(tài)。下面說下如何用C語言實(shí)現(xiàn)。
封裝
封裝的作用是減少對(duì)外的接口
} UART_X_MIX;
struct UARTTable{
uint8_t* (*UARTx_Rx)(UART_X_MIX *this); // 虛函數(shù)指針
};
如以上代碼,包含要使用到的參數(shù),和一個(gè)指向包含函數(shù)指針的結(jié)構(gòu)體,其中的函數(shù)均使用結(jié)構(gòu)體中的內(nèi)容作為參數(shù)。這樣就減少了與外部的聯(lián)系,盡量做到高內(nèi)聚、低耦合。
繼承
繼承用于擴(kuò)展,比如要在之前的功能上增加新的東西,就可以新定義一個(gè)結(jié)構(gòu)體,新的結(jié)構(gòu)體包含老的結(jié)構(gòu)體
UART_X_MIX UART_X_MIX; //
uint16_t test;
struct test *vptr2; // 虛表指針
} UART_X_MIX_test;
這樣就可以使用上一級(jí)節(jié)點(diǎn)的功能(父節(jié)點(diǎn))。
多態(tài)
多態(tài)是根據(jù)使用要求的不一樣,動(dòng)態(tài)實(shí)現(xiàn)不同功能。具體的實(shí)現(xiàn)是對(duì)上述的虛表指針(struct UARTTable *vptr)賦予不同的地址(不同函數(shù))。這樣就實(shí)現(xiàn)了動(dòng)態(tài)變化功能。
整體編程思路
1 定義一個(gè)包含所需變量和虛表指針(可以為函數(shù)指針,或者包含函數(shù)指針的結(jié)構(gòu)體)的結(jié)構(gòu)體。
uint8_t send_num;
...
struct UARTTable *vptr; // 虛表指針
} UART_X_MIX;struct UARTTable{
uint8_t* (*UARTx_Rx)(UART_X_MIX *this); // 虛函數(shù)指針
...
};
2 編寫結(jié)構(gòu)體賦值函數(shù)
使用UART6_TX_INIT()函數(shù)對(duì)結(jié)構(gòu)體賦值
3 結(jié)構(gòu)體賦值,運(yùn)行函數(shù)
先給結(jié)構(gòu)體賦值,然后運(yùn)行函數(shù)。