面向对象,是编程界的一个概念。什么叫面向对象呢?编程有两种要素:程序(方法),数据(属性)。例如:一个LED,我们可以点亮或者熄灭它,这叫方法。LED什么状态?亮还是灭?这就是属性。我们通常这样编程:
- u8 ledsta = 0;
- void ledset(u8 sta)
- {
- }
这样的编程有一个问题,假如我们有10个这样的LED,怎么写?这时我们可以引入面向对象编程,将每一个LED封装为一个对象。可以这样做:
- /*
- 定义一个结构体,将LED这个对象的属性跟方法封装。
- 这个结构体就是一个对象。
- 但是这个不是一个真实的存在,而是一个对象的抽象。
- */
- typedef struct{
- u8 sta;
- void (*setsta)(u8 sta);
- }LedObj;
- /* 声明一个LED对象,名称叫做LED1,并且实现它的方法drv_led1_setsta*/
- void drv_led1_setsta(u8 sta)
- {
- }
- LedObj LED1={
- .sta = 0,
- .setsta = drv_led1_setsta,
- };
- /* 声明一个LED对象,名称叫做LED2,并且实现它的方法drv_led2_setsta*/
- void drv_led2_setsta(u8 sta)
- {
- }
- LedObj LED2={
- .sta = 0,
- .setsta = drv_led2_setsta,
- };
- /* 操作LED的函数,参数指定哪个led*/
- void ledset(LedObj *led, u8 sta)
- {
- led->setsta(sta);
- }
是的,在C语言中,实现面向对象的手段就是结构体的使用。
|