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

1 ... 174 175 176 [ 177 ] 178 179 180 ... 342


Глава 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)



1 ... 174 175 176 [ 177 ] 178 179 180 ... 342

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