Sian 发表于 2016-6-8 10:37:39

结构体实现面向对象设计思想

1、SAObject.hpp
#ifndef SAObject_hpp
#define SAObject_hpp

#include <stdio.h>
// 声明主体对象结构体
struct SAObject{
    int id;
    char name;
    SAObject *next;
};
// 1、DataStore中包含了一个固有的SAObject
// 2、SAObject的空间分配由DataStore来管理
struct DataStore{
    SAObject header;
};

// 创建
DataStore *create();
// 新增元素
void add(DataStore *, const SAObject *);
// 销毁
void destroy(DataStore *);

#endif /* SAObject_hpp */2、SAObject.cpp#include "SAObject.hpp"
#include <stdlib.h>

// 创建
DataStore *create()
{
    DataStore *ds = (DataStore *)malloc(sizeof(DataStore));
    ds->header.next = NULL;
    return ds;
}
// 新增元素
void add(DataStore *ds, const SAObject *obj)
{
    // 复制数据
    SAObject *copy = (SAObject *)malloc(sizeof(SAObject));
    *copy = *obj;
    // 找到最后一个节点,添加新对象
    SAObject *c = &ds->header;
    while (c->next) {
      c = c->next;
    }
    c->next = copy;
    copy->next = NULL;
}
// 销毁
void destroy(DataStore *ds)
{
    SAObject *obj = ds->header.next;
    while (obj) {
      SAObject *next = obj->next;
      free(obj);
      obj->next = NULL;
      obj = next;
    }
    free(ds);
    ds->header.next = NULL;
}3、main.cpp#include <stdio.h>
#include <stdlib.h>
#include "SAObject.hpp"

int main(int argc, char *argv[])
{
    DataStore *ds = create();
   
    SAObject obj1 = {1, "sian"};
    add(ds, &obj1);
   
    SAObject obj2 = {2, "jack"};
    add(ds, &obj2);
   
    destroy(ds);
    return 0;
}
页: [1]
查看完整版本: 结构体实现面向对象设计思想