基于对象思想的结构体运用
对于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 如上
本次教程就是这么简单,最重要的还是编程的思想。