1.6 Приложение

Предыдущая  Содержание  Следующая V*D*V

Собрав вместе файлы заголовков, то есть определения абстрактных типов данных, можно написать приложение main.c:

 

#include <stdio.h>

 

#include "new.h"

#include "Object.h"

#include "Set.h"

 

int main () {

    void * s = new(Set);

    void * a = add(s, new(Object));

    void * b = add(s, new(Object));

    void * c = new(Object);

 

    if (contains(s, a) && contains(s, b))

        puts("ok");

 

    if (contains(s, c))

        puts("contains?");

 

    if (differ(a, add(s, a)))

        puts("differ?");

 

    if (contains(s, drop(s, a)))

        puts("drop?");

 

    delete(drop(s, b));

    delete(drop(s, c));

 

    return 0;

}

 

Создаётся набор и к нему добавляются два новых объекта. Если всё хорошо, мы находим эти объекты в наборе и мы не должны найти другой новый объект. Программа должна просто напечатать ok.

Вызов differ() иллюстрирует смысловой момент: математический набор может содержать только одну копию объекта a; попытка добавить его снова должна вернуть исходный объект и differ() должна вернуть ложь. Точно так же после удаления объекта он больше не должен быть в наборе.

Удаление элемента, которого нет в наборе, приведёт к тому, что в delete() передаётся пустой указатель. На данный момент мы придерживаемся семантики free() и требуем, чтобы это было приемлемо.

Предыдущая  Содержание  Следующая