Design OOP use C

打印 上一主题 下一主题

主题 863|帖子 863|积分 2589

Design OOP use C

使用c语言实现面向对象特性
以底层思维来理解面向对象。我所理解的oop:为差别的数据元提供稳定的处理逻辑框架,同时提供复写的可能,支持差别数据元个性化定制有限的逻辑;
多态特性:
基类实现一组通用处理逻辑接口,子类通过改变特定接口的执行逻辑实现将子类与个性化操作绑定;绑定的手段,C++中通过虚函数表来实现,这里使用类似的思绪;
  1. struct vritual_tb {
  2.     void (*ofunc)(void *);
  3. };
  4. struct vritual_tb * virtual_tb_new(void (*overwrite_func)(void *));
  5. void virtual_tb_delete(struct vritual_tb *);
  6. struct base_class {
  7.     char name[256];
  8.     struct vritual_tb * ifunc;
  9.     void * data;
  10. };
  11. // constructor
  12. struct base_class * base_class_new(const char * name, struct vritual_tb * iface, void * data);
  13. // destructor
  14. void base_class_delete(struct base_class *);
  15. // virtual function
  16. void base_class_call_virtual_func(struct base_class *);
复制代码
类中组合虚函数表布局体,构造类对象时传入个性化动作的句柄(函数指针)构造虚函数表对象,用于实现重载函数:
  1. void
  2. base_class_call_virtual_func(struct base_class * obj) {
  3.     struct vritual_tb * iface = obj->ifunc;
  4.     if(!iface) {
  5.         // basic operate
  6.         return;
  7.     }
  8.     // overwrite operate
  9.     iface->ofunc(obj->data);
  10. }
复制代码
用法:
  1. void
  2. overwrite_func(void * data) {
  3.     // overwrite...
  4. }
  5. void * data = malloc(sizeof("test string"));
  6. struct vritual_tb * iface = virtual_tb_new(overwrite_func);
  7. struct base_class * instance = base_class_new("sub-1", iface, data);
  8. base_class_call_virtual_func(instance);
  9. base_class_delete(instance);
  10. free(data);
复制代码
数据元的生命周期管理交由使用方负责。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

小秦哥

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表