用C语言实现面相对象编程

C语言的面向对象程序设计

    • 1. 面向对象的要素
    • 2. C语言如何实现类的功能
      • 1. C语言实现类的定义
      • 2. C语言实现类的实例化

面向对象的设计通常是C++/Java等有“类”的语言才做的事情,但事实上并不是这样的。面向对象的程序是一种程序设计思路,即使你使用C++、Java等语言,如果你还是面向过程的思维,那么设计出来的程序还是面向过程的程序而不是面向对象的程序。
只是因为C++、Java有了类,它天然就适合面向对象设计。C语言要面向对象设计需要做一些变通,这些变通其实比较简单,难的是你的思路是不是面向对象。
本篇只是做一个简单的表述,希望能起到一个抛转引玉的作用。如有表述不正确的地方,希望指正。

1. 面向对象的要素

面向对象通常需要把要实现的功能划分为几个模块(类),理想的情况下每个模块要足够小:只完成它应该完成的工作,足够独立:不与其他模块相耦合。怎么划分为几个类不是本篇的重点,本篇的重点是如何使用C语言来实现类的功能。
实现类要哪些要素呢?一是类的定义,二是类的实例化。

2. C语言如何实现类的功能

1. C语言实现类的定义

类的组成要素是:成员变量与成员函数。
对于C语言,类比于类的就是结构体,但结构体全是由变量构成的。要实现类的成员变量很简单,结构体本身就支持,主要的问题是要怎么实现成员函数。
思路一:假设用一个.c文件来表示一个模块,那么在这个模块中定义多个函数,把这些函数当成成员函数。这种情况有点类似于类里面的static函数。
思路二:在结构体上定义几个函数指针,然后在初始化函数中给这此函数指针赋值。

例子:
typedef void (*func_set_value)(uint8_t value);
typedef uint8 (*func_get_value)(void);
typedef struct
{
uint8_t value;
func_set_value p_set_func;
func_get_value p_get_func;
} class_type_t;

static class_type_t s_example_class;

void setValue(uint8_t value)
{
s_example_class.value = value;
}

uint8_t getValue(void)
{
return s_example_class.value;
}

void ClassInit(void)
{
s_example_class.p_set_func = setValue;
s_example_class.p_get_func = getValue;
}

2. C语言实现类的实例化

实例化类就是要给类分配空间,并给一些成员变量赋初值。对于C语言来说就是定义一个结构体变量,然后给结构体的成员赋值,这里的成员可以是普通变量,也可以是函数指针,也可以是结构体。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值