帝国cms7.0模板 绿色企业网站模板(整站带数据),学做糕点的网站,在线logo生成器标智客,成都网站建设询q479185700霸屏面向对象编程是一种思想#xff0c;并非一定要用哪种语言去实现#xff0c;c语言也可以实现面向对象编程。通过结构体和指针就可以实现。C语言实现各部分功能面向对象主要的有封装、继承、多态。下面说下如何用C语言实现。封装封装的作用是减少对外的接口代码语言#xff1a…面向对象编程是一种思想并非一定要用哪种语言去实现c语言也可以实现面向对象编程。通过结构体和指针就可以实现。C语言实现各部分功能面向对象主要的有封装、继承、多态。下面说下如何用C语言实现。封装封装的作用是减少对外的接口代码语言javascriptAI代码解释typedef struct { UART_X_Information UART_X; // uint16_t data_num; uint8_t *receive_data; uint32_t EventValue; UART_HandleTypeDef huart; uint8_t (*frame_data); uint32_t frame_num; uint32_t frame_num_all; uint8_t send_num; struct UARTTable *vptr; // 虚表指针} UART_X_MIX; struct UARTTable{ uint8_t* (*UARTx_Rx)(UART_X_MIX *this); // 虚函数指针 uint32_t (*UARTx_Tx)(UART_X_MIX *this); // 虚函数指针 发送串口数据 uint32_t (*UARTx_Tx_Frame)(UART_X_MIX *this); // 虚函数指针 组帧数据 };如以上代码包含要使用到的参数和一个指向包含函数指针的结构体其中的函数均使用结构体中的内容作为参数。这样就减少了与外部的联系尽量做到高内聚、低耦合。继承继承用于扩展比如要在之前的功能上增加新的东西就可以新定义一个结构体新的结构体包含老的结构体代码语言javascriptAI代码解释typedef struct { UART_X_MIX UART_X_MIX; // uint16_t test; struct test *vptr2; // 虚表指针 } UART_X_MIX_test;struct test { uint8_t* (*test1)(UART_X_MIX_test*this); // 虚函数指针};这样就可以使用上一级节点的功能父节点。多态多态是根据使用要求的不一样动态实现不同功能。具体的实现是对上述的虚表指针struct UARTTable *vptr赋予不同的地址不同函数。这样就实现了动态变化功能。整体编程思路1 定义一个包含所需变量和虚表指针可以为函数指针或者包含函数指针的结构体的结构体。代码语言javascriptAI代码解释typedef struct { uint8_t send_num; ... struct UARTTable *vptr; // 虚表指针 } UART_X_MIX; struct UARTTable{ uint8_t* (*UARTx_Rx)(UART_X_MIX *this); // 虚函数指针 ... };2 编写结构体赋值函数代码语言javascriptAI代码解释uint8_t *UARTx_Rx(UART_X_MIX * this){ ...}void UART1_TX_INIT(UART_X_MIX *thissend_num){ static struct UARTTable UARTTable {UARTx_Rx}; // 让虚表指针指向上面这个虚表 this-send_num send_num; this-vptr UARTTable;}使用UART6_TX_INIT函数对结构体赋值3 结构体赋值运行函数代码语言javascriptAI代码解释UART1_X_INIT(UART1_X_MIX,send_num);UART1_X_MIX.vptr-UARTx_Rx(UART1_X_MIX);先给结构体赋值然后运行函数。