2.4 Приложение

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

Хотя строки ещё не реализованы, всё же мы готовы написать простую тестовую программу. String.h определяет абстрактный тип данных:

 

extern const void * String;

 

Все наши методы являются общими для всех объектов; поэтому добавим их декларации в файл заголовка управления памятью new.h представленного в разделе 1.4:

 

void * clone (const void * self);

int differ (const void * self, const void * b);

 

size_t sizeOf (const void * self);

 

Первые два прототипа декларируют селекторы. Они получены от соответствующих компонентов struct Class простым удалением одной косвенной адресации из декларации. Вот это приложение:

 

#include "String.h"

#include "new.h"

 

int main () {

    void * a = new(String, "a"), * aa = clone(a);

    void * b = new(String, "b");

 

    printf("sizeOf(a) == %u\n", sizeOf(a));

    if (differ(a, b))

        puts("ok");

 

    if (differ(a, aa))

        puts("differ?");

 

    if (a == aa)

        puts("clone?");

 

    delete(a), delete(aa), delete(b);

    return 0;

}

 

Мы создаём две строки и делаем копию одной из них. Показываем размер объекта String — не размер текста контролируемого объектом — и проверяем, что два разных текста приводят к разным строкам. Наконец, проверяем, что копия равна, но не идентична оригиналу, и снова удаляем строки. Если всё хорошо, программа будет печатать что-то вроде

 

sizeOf(a) == 8

ok

 

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