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.

h03881.jpg

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])