面向对象编程是一种思想,并非一定要用哪种语言去实现,c语言也可以实现面向对象编程。通过结构体和指针就可以实现。
C语言实现各部分功能
面向对象主要的有封装、继承、多态。下面说下如何用C语言实现。
封装
封装的作用是减少对外的接口
} UART_X_MIX;
struct UARTTable{
uint8_t* (*UARTx_Rx)(UART_X_MIX *this); // 虚函数指针
};
如以上代码,包含要使用到的参数,和一个指向包含函数指针的结构体,其中的函数均使用结构体中的内容作为参数。这样就减少了与外部的联系,尽量做到高内聚、低耦合。
继承
继承用于扩展,比如要在之前的功能上增加新的东西,就可以新定义一个结构体,新的结构体包含老的结构体
UART_X_MIX UART_X_MIX; //
uint16_t test;
struct test *vptr2; // 虚表指针
} UART_X_MIX_test;
这样就可以使用上一级节点的功能(父节点)。
多态
多态是根据使用要求的不一样,动态实现不同功能。具体的实现是对上述的虚表指针(struct UARTTable *vptr)赋予不同的地址(不同函数)。这样就实现了动态变化功能。
整体编程思路
1 定义一个包含所需变量和虚表指针(可以为函数指针,或者包含函数指针的结构体)的结构体。
uint8_t send_num;
...
struct UARTTable *vptr; // 虚表指针
} UART_X_MIX;struct UARTTable{
uint8_t* (*UARTx_Rx)(UART_X_MIX *this); // 虚函数指针
...
};
2 编写结构体赋值函数
使用UART6_TX_INIT()函数对结构体赋值
3 结构体赋值,运行函数
先给结构体赋值,然后运行函数。
284