Программирование >>  Структурное программирование 

1 ... 170 171 172 [ 173 ] 174 175 176 ... 342


Глава 8

jfiiJ Перегруженная операция вывода для класса Array; fjiV ostream &operator (ostream soutput, const Array &a)

for (int i = 0; i < a.size; {

output a.ptr[i] ;

if ((i + 1) % 10 == 0) output endl;

if (i % 10 != 0) output << endl;

return output; позволяет cout << x << y;

Рис. 8.4. Определения функций-элементов класса Array (чааь 4 из 7) FIG8 4.CPP

Драйвер для простого класса Array tinclude <iostream.h> tinclude arrayl.h

J main() (

еще нет никаких объектов cout Количество созданных массивов = Array::getArrayCount() endl;

создание двух массивов и печать количества Array Array integersl(7), integers2; cout << Количество созданных массивов =

<< Array::getArrayCount() endl << endl;

печать размера и содержимого integersl cout Размер массива integersl равен << integersl.getSize () << endl

<< Массив после задания начальных значений: << endl << integersl endl;

печать размера и содержимого integers2 cout << Размер массива integers2 равен << integers2.getSize(} endl

Массив после задания начальных значений: << endl << integers2 endl;

ввод и печать integersl и integers2 cout Введите 17 целых чисел: endl; cin integersl integers2;

cout << После ввода массивы содержат: endl << integersl: << integersl integers2: integers2 endl;

использование перегруженной операции проверки неравенства (!=) cout << Оценка: integersl != integers2 <<endl; if (integersl != integers2)

cout << Они не равны << endl;

Рис. 8.4. Драйвер для класса Array (часть 5 из 7)



cout endl Размер массива integers3 равен integers3.getSize О endl << Массив после задания начальных значений: << endl

integers3 endl;

* V

VV использование перегруженной операции присваивания (=) cout << Присваивание массива integers2 массиву integersl: endl;

integersl = integers2;

cout integersl: integersl Ti-\ integers2: << integers2 endl;

X. i

HI IH Hi

использование перегруженной операции проверки равенства (==) cout << Оценка: integersl == integers2 << endl; if (integersl == integers2)

cout << Они равны << endl << endl;

использование перегруженной операции индексации для создания R-величины

cout integersl[5] равен integersl[5] <<endl;

использование перегруженной операции индексации для создания L-величины

cout Присваивание 1000 элементу integersl[5] << endl; integersl[5] = 1000;

cout integersl: integersl endl;

попытка использовать индекс вне диапазона -cout << Попытка присвоить 1000 элементу integersl[15] <<endl;

integersl[15] = 1000; ОШИБКА: вне диапазона

return 0; }

Рис. 8.4. Драйвер для класса Array (часть 6 из 7)

Количество созданных массивов = О ] Количество созданных массивов = 2

Размер массива integersl равен 7 Массив после задания начальных значений: 0 0 0 0 0 0 0

Размер массива integers2 равен 10 Массив после задания начальных значений: 0000000000

Введите 17 целых чисел: После ввода массивы содержат: j integersl: 1 2 3 4 5 6 7

integers2: 8 9 10 IX Х2 13 14 15 16 17

. . создание массива integers3, использующего integersl

для задания начальных значений; печать размера и содержимого

Array integers3 (integersl) ;



Оценка: integersl != integers2 Они не равны

Размер массива integersS равен 7 Массив после задания начальных значений: 1 2 3 4 5 6 7

Присваивание массива integers2 массиву integersl: integersl: 8 9 10 11 12 13 14 15 16 17 integers2: 8 9 10 11 12 13 14 15 16 17

Оценка: integersl == integers2 Они равны

integersl[5] равен 13

Присваивание 1000 элементу integersl[5] integersl: 8 9 10 11 12 1000 14 15 16 17

Попытка присвоить 1000 элементу integersl[15] Assertion failed: О <= subscript && subscript < size,

file ARRAYl.CPP, line 93 Abnormal program termination

Рис. 8.4. Выходные данные драйвера для класса Array (чааь 7 из 7)

Пользователю предлагается ввести 17 целых чисел. Перегруженная операция взять из потока используется для чтения этих значений в оба массива с помощью оператора

cin >> integersl integers2;

Первые семь значений запоминаются в integersl, а оставшиеся значения запоминаются в integers2. Содержимое обоих массивов выводится на экран операцией вставить в поток, чтобы удостовериться, что ввод был выполнен правильно.

Далее программа проверяет перегруженную операцию проверки на неравенство путем оценки условия

integersl != integers2

и сообщает, что массивы действительно не равны.

Программа создает третий массив, названный integersS, и инициализирует его с помощью массива integersl. Программа выводит размер массива integersS, а затем и сам массив, используя перегруженную операцию поместить в поток, чтобы удостовериться, что конструктор задал элементам массива правильные начальные значения.

Далее программа проверяет перегруженную операцию присваивания с помощью выражения integersl = integers2. Печатается содержимое обоих массивов, чтобы удостовериться, что присваивание было правильным. Интересно отметить, что integersl первоначально содержал 7 целых чисел и потребовалось изменить его размер, чтобы вместить копию 10 элементов массива integers2. Как мы увидим, перегруженная операция присваивания легко выполняет это изменение размера.

Далее программа проверяет перегруженную операцию проверки на равенство (==), чтобы можно было убедиться, что объекты integersl и integers2 действительно идентичны после выполнения операции присваивания.



1 ... 170 171 172 [ 173 ] 174 175 176 ... 342

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика