2.4 Приложение |
Предыдущая Содержание Следующая |
Хотя строки ещё не реализованы, всё же мы готовы написать простую тестовую программу. 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
|
Предыдущая Содержание Следующая |