假设有一个员工ADT,例如
//employee.h
typedef struct employee_t employee_t;
employee_t* employee_create(char* company, char* department, char* position);
void employee_free(employee_t* me);
, 客户端代码将是
#include "employee.h"
employee_t* Kevin = employee_create("Facebook", "Marketing", "Sales");
employee_t* John = employee_create("Microsoft", "R&D", "Engineer");
现在客户想使用列表 ADT 将 Kevin 和 John 插入到列表中以执行某些任务。
//list.h
typedef struct list_t list_t;
list_t* list_create(/*might have some arguments*/);
所以客户端代码将是
#include "employee.h"
#include "list.h"
employee_t* Kevin = employee_create("Facebook", "Marketing", "Sales");
employee_t* John = employee_create("Microsoft", "R&D", "Engineer");
list_t* employee = list_create(/*might have some arguments*/);
list_insert(employee, Kevin);
list_insert(employee, John);
employee_free(Kevin);
employee_free(John);
list_print(employee); //Oops! How to print structure that you can't see?
因为employee是用不透明指针封装的,所以list没有办法复制它。
如何为列表编写 ADT 和实现?