Глава 16. Перегрузка операций_______________________________389
12 (
13 // Если new возвращает допустимый блок памяти
14 // тогда data не нуль. Функция memset
15 // инициализирует блок значением 0.
16 if(data)
17 memset( data, 0, dummy);
18 else
19 max = -1;
20 }
21 // деструктор
22 INT_ARRAY::~INT_ARRAY()
23 {
24 // освобождение массива
25 delete [] data;
26 // установка указателя в 0 позволяет -
27 // проверять его недопустимость
28 data = 0;
29 }
30 // Очень кратко, но допустимость индекса проверяется.
31 // Этот класс проблем — превосходный кандидат для
32 // обработки исключительных ситуаций (см. главу 22).
33 int& INT ARRAY::operator[]( unsigned int index)
34 {
35 // Защита выключена, если NODEBUG определена
36 assert( index < max) ;
37 return index < max ? data[index] : data[ dummy ];
38 }
39 // Отладочный стенд указывает, что код протестирован,
40 // позволяет его отлаживать, проверять при внесении изменений,
41 // легко включается и выключается директивами
42 // препроцессора и, наконец, демонстрирует пример использования
43 // вашего класса.
44 #ifdef SMARRAY1_SCAFFOLD
45 // Директива препроцессора определена в
46 // Options I Project[Compiler[Defines
47 void main()
48 (
49 INT_ARRAY startMeUp( 10);
50 for( unsigned int k = 0;.k<10; k++)
51 // здесь используется операция []
52 startMeUp[k] = k;
53
54 } ,
55 ttendif
В строке 11 инициализируются данные-члены класса. Отдельный элемент dummy используется для хранения и выборки фиктивного значения на случай использования недопустимого индекса. В данном примере фиктивное зна-