⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 objectmodel.c

📁 c语言是面向过程的程序语言
💻 C
字号:
/*  -----------------  OOPC Object model  -----------------*//*  base types*//* object type (public) */typedef union {  struct _ooc_vtbl_object const* const  __vptr;  struct _ooc_vtbl_object const*_CONST_ __iptr;} t_object;/* object virtual table type (private) */struct _ooc_vtbl_object {  struct _ooc_type_info const*_CONST_ info;  size_t offset;};/* object class type */struct _ooc_class_object {  struct _ooc_vtbl_object const*const __vptr;  t_object  (*const object) (void);  void (*const _object)  (t_object *const);  t_object* (*const alloc)  (void);};/* object RTTI (private) */struct _ooc_type_info {  char const*const name;  struct _ooc_class_object const*_CONST_ class;  t_object const*_CONST_ obj;  struct _ooc_type_info const*_CONST_ super;  size_t _CONST_ extraSuper;  size_t _CONST_ extraOffset[_OBJECT_MAXSUPER_];};/*  OBJECT types*//* OBJECT type (public) */typedef union {  struct _ooc_vtbl_OBJECT const* const  __vptr;  /* vitual table access  */   struct _ooc_vtbl_object const*_CONST_ __iptr;  /* info & offset access */  struct { /* access to members */    t_SUPER1 SUPER1; /* INHERIT_MEMBERS_OF(SUPER1) */    t_SUPER2 SUPER2; /* INHERIT_MEMBERS_OF(SUPER2) */        /* OBJECT members */  } m;} t_OBJECT;/* OBJECT virtual table type (private) */struct _ooc_vtbl_OBJECT {  struct _ooc_vtbl_SUPER1 SUPER1; /* INHERIT_METHODS_OF(SUPER1) */  struct _ooc_vtbl_SUPER2 SUPER2; /* INHERIT_METHODS_OF(SUPER2) */  /* OBJECT methods */};/* OBJECT class type (private) */struct _ooc_class_OBJECT {  struct _ooc_vtbl_OBJECT const*const __vptr;  t_OBJECT classMethod(OBJECT);      /* default constructor */  void method(_OBJECT);              /* default destructor  */  t_OBJECT*const classMethod(alloc); /* default allocator   */  /* OBJECT class members */};/*  object creation if new available*/t_OBJECT *obj = OBJECT.new(...);/*  object members*/  /* access to data */obj->m.datafield;/* access to superclass sclass data */obj->m.sclass.m.datafield;/* access to supersuperclass ssclass data */obj->m.sclass.m.ssclass.m.datafield;/*  object methods*//* access to method */obj->__vptr->method(obj);/* access to superclass sclass method (I) bad */obj->__vptr->sclass.method(&obj->m.sclass);/* access to superclass sclass method (II) good */(&obj->m.sclass)->__vptr->method(&obj->m.sclass);/* access to supersuperclass ssclass method */(&obj->m.sclass.m.ssclass)->__vptr->method(&obj->m.sclass.m.ssclass);/*  object infos*//* object offset from base class */obj->__iptr->offset;/* object class name */obj->__iptr->info->name;/* object class address */obj->__iptr->info->class;/* object superclass info address */obj->__iptr->info->super;/* number of object extra superclasses */obj->__iptr->info->extraSuper;/* object superclasses offsets */obj->__iptr->info->extraOffset[i];/*  EXAMPLES*//* OBJECTS *//* education --> object */typedef union {  struct _ooc_vtbl_education const*const __vptr;  struct _ooc_vtbl_object    const*const __iptr;  struct {    t_object const private(_); /* base object */    char const *diploma;  } m;} t_education;/* person --> object */typedef union {  struct _ooc_vtbl_person const*const __vptr;  struct _ooc_vtbl_object const*const __iptr;  struct {    t_object const private(_); /* base object */    char const *name;  } m;} t_person;/* employee --> person */typedef union {  struct _ooc_vtbl_employee const*const __vptr;  struct _ooc_vtbl_object   const*const __iptr;  struct {    t_person person; /* derived object */    char const *department;  } m;} t_employee;/* manager --> employee           --> education */typedef union {  struct _ooc_vtbl_manager const*const __vptr;  struct _ooc_vtbl_object  const*const __iptr;  struct {    t_employee  employee;  /* derived object */    t_education education; /* derived object */    int level;  } m;} t_manager;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -