Design OOP use C 使用c語言實現面向對象特性 以底層思維來理解面向對象。我所理解的oop:為不同的數據元提供穩定的處理邏輯框架,同時提供覆寫的可能,支持不同數據元個性化定製有限的邏輯; 多態特性: 基類實現一組通用處理邏輯介面,子類通過改變特定介面的執行邏輯實現將子類與個性化操作綁定 ...
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);
數據元的生命周期管理交由使用方負責。
本文來自博客園,作者:linxx-,轉載請註明原文鏈接:https://www.cnblogs.com/linxx-/p/18219023