嵌入式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);

};

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

完整代码如下:

#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 如上

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值