358______________ _____Часть III. Современное программирование на C++
4: #ifndef _SMARRAY1_H
5: #define _SMARRAY1_H
6: Class INT_ARRAY
7: {
8: public:
9: INT_ARRAY( unsigned int sz = 100);
10 ~INT_ARRAY() ;
11 // Использование беззнаковых целых исключает необходимость
12 // проверки того, что индекс меньше О
13 ints operator []( unsigned int index');
14 private:
15 unsigned int max;
16 unsigned int dummy;
17 int.* data;
18 // Объявленные здесь функции-члены недоступны.
19 // Если они не будут определены в дальнейшем, то компилятор
20 // заблокирует копирование и присваивание массивов.
21 // Остроумно?
22 INT_ARRAY(const INT_ARRAY&) ;
23 INT_ARRAY& operator=(const INT_ARRAY&);
24 };
25 ftendif
В строке 13 объявлена индексная операция. Когда возвращаемый тип определен как ссылка, это означает, что возвращается адрес элемента. В результате индексная операция может быть как левосторонней, так и правосторонней.
Совет
Объявления классов обычно помещаются в заголовочные файлы, потому что в C++ использованию должно предшествовать объявление. Включение необходимых объявлений обеспечивается с помощью директивы ftinclude.
Определение класса и испытательный стенд для него приведены в листинге 16.3.
1 // SMARRAYl.CPP — Использование класса интеллектуального массива
2 // Copyright (с) 1995. All Rights Reserved.
3 // By Paul Kimmel.
4 #include <mem.h>
5 // #define NDEBUG // снимите комментарий для выключения assert
6 ftinclude <assert.h>
7 ttinclude "smarrayl.h"
8 // Конструктор — добавляет к размеру массива единицу для хранения
9 // фиктивного значения на случай недопустимого индекса.
10: INT_ARRAY: :INT_ARRAY( unsigned int sz)
11: : max(sz), dummy ( sz + 1), data( new int[sz + 1])