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

来源:互联网 发布:怎么安装mac os x 编辑:程序博客网 时间:2024/06/05 09:08

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

对于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);};

接下来我们实际操作后运行的结果如下:这里写图片描述

完整代码如下:

#include <stdlib.h>#include <stdio.h>#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 如上

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

原创粉丝点击