嵌入式c语言高级编程技巧 之 结构体的对象思维。

基于对象思想的结构体运用

对于c语言来说好像没有对象这个概念,但是结构体的出现可以完全模拟对象情况

举个简单的例子,就好像c++教程里关于求矩形的面积的问题,先定义一个对象类。

class 矩形  
{  
  ...
    public:
  ...
    void set_lenght(){};
    void set_width{};
    void get_area(){};
};  

但是对于c语言可以用结构体完成相同的抽象操作

typedef struct rectangular rectangular_model;
typedef struct _ops_rect  rect_ops_rect;

struct rectangular
{
  char lenght;
  char width;
  rect_ops_rect* P_ops;
};

struct _ops_rect 
{
  void (*set_lenght)(rectangular_model *rect, char lenght);
  void (*set_width)(rectangular_model *rect, char lenght);
  int (*get_area)(rectangular_model *rect);

};

接下来我们实际操作后运行的结果如下:嵌入式c语言高级编程技巧 之 结构体的对象思维。_第1张图片

完整代码如下:

#include 
#include 
#include "1_struct.h"


void op_set_lenght(rectangular_model *rect, char lenght)
{
    rect->lenght =lenght;
    return;
}

void op_set_width(rectangular_model *rect, char width)
{

    rect->width =width;
    return;
}

int op_get_area(rectangular_model *rect)
{
    int area;

    area= (rect->lenght )* (rect->width);
    return area;


}

static rect_ops_rect _ops=
{
    op_set_lenght,
    op_set_width,
    op_get_area
};

void main(void)
{
    int area_size;
    rectangular_model new_rect_object;    //new object

    new_rect_object.lenght = 0;           //init object
    new_rect_object.width = 0;
    new_rect_object.P_ops =&_ops;

    new_rect_object.P_ops->set_lenght(&new_rect_object,10);      //ops  object
    new_rect_object.P_ops->set_width(&new_rect_object,10);
    area_size=new_rect_object.P_ops->get_area(&new_rect_object);

    printf("矩形面积= %d",area_size);   //get area
}
@头文件 1_struct.h 如上

本次教程就是这么简单,最重要的还是编程的思想。

你可能感兴趣的:(嵌入式软件设计)