俺使用的C语言面向对象范式(前言与第一节:一个简单类的封装)

前言:


    由于俺迫于可移植性,还有嵌入式的各种限制。只好使用C语言来实现C++中的面向对象编程方法。
    有些时候不用OO还不行,互相关联的对象关系说不清,命名空间污染得得厉害。
    但是C语言原生不支持class,继承,虚函数等的语法。参考了一些网上用C写OO的模板与教材,感觉太依赖于宏定义跟预处理了。继承起来很不好理解。
    最后看了云风兄的博文,深有启发。

    俺给自己定了个原则:1.能不用宏的地方不用宏,能不用指针就不用指针,能不用C语言偏僻技巧就不用。程序不是光自己看的,还要给维护代码的人看。2.有选择性的使用OO,尽量不用继承Inheritance而用构造Composition,主要使用面向接口来实现OO。
   

一、 一个简单类的封装


如果现在有一个接口Iface. 对应着一个数据类型(结构体)。

struct Dface; struct Iface{ void(*init)(struct Dface* data); void(*dosomething)(struct Dface* data); };

如果有一个类Class需要实现接口Iface:

struct Class{ struct Iface* i_face; //这里使用指针是因为每个类对应的接口只需要一份拷贝就足够了 struct Dface d_face; // 这里不使用指针 };

为Class创建一个接口实例:

struct Iface i_face_for_Class = { face_init_for_Class, face_dosomething_for_Class, };

为Class写一个初始化函数:
Class_init(struct Class* c) { c->i_face = &i_face_for_Class; //注意!! 初始化对象的接口指针! c->i_face->init(&c->d_face); //调用接口i_face函数 }

实例化Class的一个对象:
struct Class Object; Class_init(&Object);

调用一个函数试试 :) ~~
Object.i_face->dosomething(&Object.d_face);

小结:

        代码还算清爽,就是调用函数比较罗嗦。其实是可以用:1.宏来简化代码,但是坚决能不用就不用了。2.在Object当中保存一个名叫this的指针!指向Object本身。还是算了,整那么多指针违反原则。

参考:


1.博客文章:《我所偏爱的 C 语言面向对象编程范式》   云风的BLOG
2.程序代码:《LW_OOPC》        http://sourceforge.net/projects/lwoopc/
3.图书:《Object-oriented Programming with ANSI-C》
4.图书:《Python源码剖析》

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值