|
Программирование >> Структурное программирование
Глава 8 копирование подстроки в новый String strncpy(sub.sPtr, SsPtr[index], sub.length) , sub.sPtr[sub.length] = \0; завершение нового String return sub; возвращение копии sub объекта String Возвращение длины строки int String::getLengthО const ( return length; } Перегруженная операция вывода данных ostream &operator<< (ostream soutput, const String &s) output << s.sPtr; return output; возможность сцепления Перегруженная операция ввода данных istream &operator>>(istream sinput, String &s) ( char temp[100]; буфер для хранения входных данных input setw (100) temp; s = temp; использование операции присваивания класса String return input; возможность сцепления Рис. 8.5. Определения функций-элементов класса String (часть 5 из 8) FIG8 5.CPP Драйвер для класса String #include <iostream.h> #include string2.h mam i { String si( поздравляем ), s2( с днем рождения ), s3; проверка перегруженных операций проверки равенства и отношений cout si равна \ si \ ; s2 равна \ s2 \ ; S3 равна \ s3 \ << endl << Результат сравнения s2 и si: <<endl s2 == si дает результат (s2 == si) endl << s2 != si дает результат << .(s2 != si) << endl s2 > si дает результат (s2 > si) endl s2 < si дает результат (s2 < si) endl << s2 >= si дает результат << (s2 >= si) << endl << s2 <= si дает результат <<(s2 <= si) <<endl <<endl; проверка перегруженной операции проверки пустого String (!) cout Проверка !s3: endl; if (!s3) { cout << s3 пустая; присваивание si строке s3; << endl; s3 =sl; проверка перегруженного присваивания cout << s3 равна \ s3 \ << endl << endl; проверка перегруженной операции сцепления String cout si += s2 дает результат si = ; si += s2; проверка перегруженного сцепления cout si endl endl; проверка конструктора преобразования cout si += \ вас\ дает результат endl; si += вас ; проверка конструктора преобразования cout si = si endl endl; проверка перегруженной функции вызова операции () для подстроки cout Подстрока si начиная с << endl О до 27, si (О, 27), равна: si (О, 27) endl endl; проверка опции подстроки до конца String cout << Подстрока si начиная с endl 28, si (28, 0), равна: si (28, 0) endl endl; О означает до конца строки проверка конструктора копии String *s4Ptr = new String(sl); cout *s4Ptr = *s4Ptr endl endl; проверка операции присваивания (=) с самоприсваиванием cout << самоприсваивание *s4Ptr <<endl; *s4Ptr = *s4Ptr; проверка перегруженного самоприсваивания cout *s4Ptr = *s4Ptr endl; проверка деструктора delete s4Ptr; проверка использования операции подстроки для создания L-величины si [0] = П; si [14] = Д; cout endl si после sl[0] = П и si [14] = Д дает результат: si endl endl; проверка индекса на выход из диапазона cout Попытка присвоить Д элементу si[50] дает результат: endl; si [50] = Д; ОШИБКА: индекс вне диапазона return 0; } Рис. 8.5. Драйвер для проверки класса String (чааь 7 из 8) Мы начнем с внутреннего представления String. Строки private: char *sPtr; указатель на начало строки int length; длина строки Конструктор преобразования: поздравляем : Конструктор преобразования: с днем рождения Конструктор преобразования: si равна поздравляем ; s2 равна с днем рождения ; s3 равна Результат сравнения s2 и si: s2 == si дает результат О s2 != si дает результат 1 s2 > si дает результат О s2 < si дает результат 1 s2 >= si дает результат О s2 <= si дает результат 1 Проверка !s3: s3 пустая; присваивание si строке s3; вызов operator= s3 равна поздравляем si += s2 дает результат si = поздравляем с днем рождения si += вас дает результат Конструктор преобразования: вас Деструктор: вас si = поздравляем с днем рождения вас Конструктор преобразования: I Подстрока si начиная с : О до 27, sl(0, 27), равна: поздравляем с днем рождения Конструктор преобразования: Подстрока si начиная с 28, sl(28, 0), равна: вас Конструктор копии: поздравляем с днем рождения вас *s4Ptr = поздравляем с днем рождения вас самоприсваивание *s4Ptr вызов operator= Попытка самоприсваивания String *s4Ptr = поздравляем с днем рождения вас Деструктор: поздравляем с днем рождения вас si после sl[0] = П и si [14] = Д дает результат: Поздравляем с Днем рождения вас Попытка присвоить Д элементу si[50] дает результат: Assertion failed: subscript >= О && subscript < iength, file STRING2.CPP, line 99 Abnormal program termination Рис. 8.5. Выходные данные драйвера для проверки класса String (часть 8 из 8)
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |