|
Программирование >> Структурное программирование
Глава 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 действительно идентичны после выполнения операции присваивания.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |