首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

C面向对象编程-抽象数据类型(二)

2013-11-15 
C面向对象编程--抽象数据类型(2)接上一篇:C面向对象编程--抽象数据类型(1)?,本篇主要实现Set实现--Setmain

C面向对象编程--抽象数据类型(2)

接上一篇:C面向对象编程--抽象数据类型(1)?,本篇主要实现Set

实现--Set

main.c 可以成功编译,但是在编译和执行程序之前,我们必须实现抽象数据类型和内存管理,如果一个对象不储存任何信息,并且每一个对象都至少属于一个set,那么我们可以用一个唯一的较小的正整数值来表示对象和每一个set,而这些正整数值可以使用一个数组heap[ ]中的索引来表示。

如果一个对象是set的成员,对应的数组元素包含代表set的整数值。

Sets和对象具有相同的展示,new( )不会在意type的类型描述,它将返回heap[ ]中值为0的元素,代码如下:

#include <assert.h>#include <stdio.h>#include "new.h"#include "Set.h"#include "Object.h"const void * Set;const void * Object;#if ! defined MANY || MANY < 1#defineMANY10#endifstatic int heap [MANY];void * new (const void * type, ...){int * p;/* & heap[1..] */for (p = heap + 1; p < heap + MANY; ++ p)if (! * p)break;assert(p < heap + MANY);* p = MANY;return p;}void delete (void * _item){int * item = _item;if (item){assert(item > heap && item < heap + MANY);* item = 0;}}void * add (void * _set, const void * _element){int * set = _set;const int * element = _element;assert(set > heap && set < heap + MANY);assert(* set == MANY);assert(element > heap && element < heap + MANY);if (* element == MANY)* (int *) element = set - heap;elseassert(* element == set - heap);return (void *) element;}void * find (const void * _set, const void * _element){const int * set = _set;const int * element = _element;assert(set > heap && set < heap + MANY);assert(* set == MANY);assert(element > heap && element < heap + MANY);assert(* element);return * element == set - heap ? (void *) element : 0;}int contains (const void * _set, const void * _element){return find(_set, _element) != 0;}void * drop (void * _set, const void * _element){int * element = find(_set, _element);if (element)* element = MANY;return element;}int differ (const void * a, const void * b){return a != b;}

?

热点排行