C语言虽说不像C++提供了封装、继承、多态的机制可以很容易实现面向对象编程。但是C语言的结构体可以很好的实现封装和继承,按照面向对象编程的思想实现面向对象编程。下面简要介绍一小使用C语言实现的过程:
1.“基类”结构体的定义
//定义基类,包含基本属性,给其他结构体继承
typedef struct
{
char name[10]; //定义name
int age; //定义age
}super;
2.“派生类”结构体的定义
//定义派生类,除了继承基类的基本信息以外,还增加了score属性信息,以及操作函数
struct person {
super my_base_info; //继承基类
float score; //新增属性
void (*show_info)(char*, int, float); //show_info操作函数
float (*score_total)(float); //score_total操作函数
};
3.结构体操作函数实例化
//结构体中show_info函数的实现
void my_show_info(char* my_name, int my_age, float my_float)
{
printf("my_name=%s\r\n",my_name);
printf("my_age=%d\r\n",my_age);
printf("my_float=%f\r\n",my_float);
}
//结构体中score_total函数的实现
float my_score_total(float my_float)
{
float my_total;
my_total=my_float+10.1;
printf("my_total=%f\r\n",my_total);
return my_total;
}
4.main函数实现面向对象编程
int mian()
{
/*定义结构体并初始化*/
struct person hututu = {
.my_base_info={
.name = "hututu",
.age = 10
},
.score=88.88,
.show_info=my_show_info, //重要,将实例化的函数指针挂在这里
.score_total=my_score_total//重要,将实例化的函数指针挂在这里
};
float result=0;
/*调用结构体中的函数*/
hututu.show_info(hututu.my_base_info.name,hututu.my_base_info.age,hututu.score);
result=hututu.score_total(hututu.score);
return 0;
}
5.总结
本文借助结构体实现了类之间的封装和继承,由于结构体良好的封装特性,可以借此实现C语言的面向对象编程,对于多态的实现较为复杂,因此对于需要大量使用到多态特性的应用,还是建议使用C++,毕竟在语言层面支持多态,省去了我们的开发步骤。