Design OOP use C
  HTNOaXY9Ey0C 2024年08月06日 90 0

Design OOP use C

使用c语言实现面向对象特性

以底层思维来理解面向对象。我所理解的oop:为不同的数据元提供稳定的处理逻辑框架,同时提供复写的可能,支持不同数据元个性化定制有限的逻辑;

多态特性:

基类实现一组通用处理逻辑接口,子类通过改变特定接口的执行逻辑实现将子类与个性化操作绑定;绑定的手段,C++中通过虚函数表来实现,这里使用类似的思路;

struct vritual_tb {
    void (*ofunc)(void *);
};
struct vritual_tb * virtual_tb_new(void (*overwrite_func)(void *));
void virtual_tb_delete(struct vritual_tb *);

struct base_class {
    char name[256];
    struct vritual_tb * ifunc;
    void * data;
};

// constructor
struct base_class * base_class_new(const char * name, struct vritual_tb * iface, void * data);
// destructor 
void base_class_delete(struct base_class *);

// virtual function
void base_class_call_virtual_func(struct base_class *);

类中组合虚函数表结构体,构造类对象时传入个性化动作的句柄(函数指针)构造虚函数表对象,用于实现重载函数:

void
base_class_call_virtual_func(struct base_class * obj) {
    struct vritual_tb * iface = obj->ifunc;
    if(!iface) {
        // basic operate
        return;
    }
    // overwrite operate
    iface->ofunc(obj->data);
}

用法:

void
overwrite_func(void * data) {
    // overwrite...
}

void * data = malloc(sizeof("test string"));
struct vritual_tb * iface = virtual_tb_new(overwrite_func);
struct base_class * instance = base_class_new("sub-1", iface, data);
base_class_call_virtual_func(instance);
base_class_delete(instance);
free(data);

数据元的生命周期管理交由使用方负责。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2024年08月06日 0

暂无评论

推荐阅读
  gtqiVYjgvftt   11天前   33   0   0 C语言
  FZifmKVgRC4p   2024年08月13日   32   0   0 C语言
  C0Tz0A5KKSwy   13小时前   9   0   0 C语言
  IbmESGwVVrv0   2024年08月16日   153   0   0 C语言
  C0Tz0A5KKSwy   13小时前   7   0   0 C语言
  FZifmKVgRC4p   2024年08月16日   88   0   0 C语言
HTNOaXY9Ey0C