Главная » Просмотр файлов » Г. Шилдт - Полный справочник по C++

Г. Шилдт - Полный справочник по C++ (1109478), страница 139

Файл №1109478 Г. Шилдт - Полный справочник по C++ (Г. Шилдт - Полный справочник по C++) 139 страницаГ. Шилдт - Полный справочник по C++ (1109478) страница 1392019-04-28СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 139)

° Конкатенации двух строк должна осуц(ествляться с помощью оператора "+'*. ° Удаление подстроки должно осуществляться с помощью оператора "-". ° Сравнение строк должно выполняться с помощью операторов сравнения. ° Строковые обьекты должны инициализироваться либо строками, заключенными в кавычки, либо другим строковым объектом.

° Строки должны ил1еть произвольную и переменную длину. Следовательно, они должны размегдаться в динамической памяти. ° Следует предусмотреть способ преобразования строкового обьекта в строку, завершающуюся нулевым байтом. Хотя наш класс по определению слабее стандартного, он обладает свойством, которым не обладает класс ьавдо вЫад.

'удаление подстроки с помощью оператора *'-". Класс, управляющий работой со строками, называется веттуре. Его объявление приведено ниже. сгавв Ятттуре ( с)зат *р; ъпт въте; риЬ11с: Ятттуре П; ЯттТуре(сват *втт); Ятттуре(сопят Яттзуре Ьо); // Конструктор копирования -ятттуре() ( г)е1ете () р; ) ттъепг) пестеле аоретатот« (овттеае авттеае, ятттуре ао)) Йтзепб Тестем аоретаеот» (Тестем ьвттеае, ятттуре ьо); яттТуре оретатот=(Бтттуре Ьо)) // Присваиваиие объекта Часть Ч. Приложения нв языке С++ // класса БХ Туре. БсхТуре орегагаг=(спят *я); // Присваиваиие строки, // взятой в кавычки. ягтТуре арегагог+(Бгхтуре ьо); // // // // ?г1епь) Бхгтуре оретахаг+(спет *я, // // // БсгТуре орегахог-(Бггтуре Ьа); // вычитание подстроки.

Бггтуре оретасох-(с)1аг *я); // Бычитание подстроки, // взятой в кавычки. Бгттуре. геката !ягтспр(р, о.р); хетага яххспр(Р с.р); 1 хетага вгхспр(Р. о.р) О' ) техатп ягхсп1р(р, о.р) > О: хетага яхгспр(р, а.р) <= О; 1 тегатп ясгспр(р, о.р) >= О; ) класса Бгттуре и строками, гехцгп хехцгп тегахп гехцхп гехцгп гесцгг1 1пх яххя?хе() ( гехцтп ягт?еп(р); ) // Размер строки. чаю) пакеяхт(с)?аг *в) ( Ягхсру(я, р); ) // Создать строку, взятую в кавычки. орегахот снах *(1 те?ага р; ) // Преобразовать в тип с)>аг *, ), Закрытый раздел класса вхттуре содержит только два члена: р и в1яе.

При создании строкового объекта линамичсская память выделяется оператором пеи, а указатель на выделенную область записывастся в указатель р, Строка, адресуемая указателем р, представляет собой обычный массив символов, завершаюшийся нулевым байтом. Размер строки записывается в псле яхве, хотя с технической точки зрения это не обязательно. Поскольку строка, ца которую ссылается указатель р, завершается нулем, сс размер можно вычислять в любое время. Однако, как мы увидим, это значение используется членамн класса веттуре так часто, что повторяюшиеся вызовы функции вхт1еп() становятся неэффективными.

Устройство класса вххтуре рассматривается в следуюн?их разделах. | // Без явной инициализации. Бггтуре::БггТуре() я1яе = 1; // Создаем место для нулевого символа. ?ту ( Глава 39. Интеграция новых классов: пользовательский класс для работы со строками 783 // Сравнение объектов класса хпг аретагат==(БХгТуре Ьо) ( 1пг оретясот)=(БХтТуре Ьо) ( 1пт. орегагог<(Бгхтуре Ьо) ( хпт орегасох>(БХгтуре Ьо) ( 1пх орегагаг<=(БХгтуре Ьо) хпс орегасах>--(Бсттуре Ьа) // Операции над объектами // взятыии я кавычки.

хпх орегахат==(с)>ат *в) ( ?пс орегахст!=(с)1ат *я) 1ггг арегасот<(сбат *я) хпх орехахот>(айаг *я) ( 1пх аретахот« (спах *я) ( 1пх оретахог><(с)ьат *я) ( Конкатенация двух объектов класса БгхТуре. Коикатеьация двух строк, взятых в кавычки. Бтгтуре Ьо); /* Конкатенация строки, заключенной в кавычки, с объектом класса БггТуре */ !вхтспр(р, я); ) всгспр(р, в); ) ягхспр(Р, я) < О; ) яхгспр(р, я) > О; ) яхтспр(р, я) <= О; ) яхгспр(р, я»< О) ] р =. пеь.

снаг(вгге); сагсЬ (Ьаб а11ос ха) ( сонг « "Ощкбка при распрслеленнн памятн1п'; ох)с(1); ьсгсру(р. ""): ) Инициализация с гс,мощью строки, взятой в кавычки. Бггтуре::Бггтуре(снаг *згг) ( зъге -" вгг1еп(вег) + 1; // Создаем место лгя нулевого символа. Ьгу ( р = пем снах(въве); сассЬ (Ьас1 а11ос ха) соцс « Ощнбка прн распределении памятн1п"/ ехъс(1); всгсру(р, всг.); ) // Инициализация с помощью объекта класса Бсгтуре.

Бсгтуре::Бггтуре(сопят Бсгтуре ьо) ( въге = о.зтге; ггу ( р = пен сиаг(з1зе)с ) сассЬ (Ьас) а11ос ха) ( сонг « "Ощнбка при распределении памяти(п'с ехтс(1); ) вггсру(р, о.р); ) Когда объект класса яегтурв создается, но не инициализируется, ему присваивается пулевая строка. Хотя строка не может оставаться неопределенной, предположение, что объект класса яегтурв содержит корректную строку, завершаюшуюся нулевым баитом, упрошает работу некоторых функции-членов. Котла объект класса Яегтурв инициализируется строкой, взятои в кавычки, сначала определяется размер строки. За~ем с помошью оператора пвм выделяется достаточный объект памя~и, и строка инициализации копируется в облазь памяти, адресуемую указателем р.

Процедура инициализации объекта класса дегтурв другим объектом этого типа практически совпадает с процедурой инициализации объекта строкои, взятой в кавычки. Этот вариант конструктора класса дегтурв является конструктором копирования. Он вызывается каждыи раз, когда создаваемый объект инициализируезся другим объектом класса яегтурв. Это значит„по он вызывается как при создании временных объектов, так и при передаче объектов типа яегтурв в качестве параметров функции. (Конструкторы копирования рассматривались в главе 14.) 'с аким образом, следуюшне три объявления явля югся вполне допустимыми. | БСГтуре х("щу вегзпп"); // Применяется строка, взятая в кавичкн. Бггтуре у(х); // Используется Лругой объект типа Ясгтуре. БггТуре зс // Явная инициализация не выполняется.

ДестРУк~оР класса ЯегтУРв пРос~о освобождает памЯтсь на котоРУю ссылаетса указатель р. Часть Ч. Приложения на языке С++ ~~п Ввод и вывод строк Поскольку строки часто вводятся и выводятся, в классе веттуре предусмотрены перегруженные версии операторов "«*' и "»". // Вывод строки. светел доретаеотсс(ояетеепп ьяетеазп, Беттуре ьо) яетеезп сс о.р; теготд яетеапи ) // Ввод строки, ьяетеаж Ьаретасот» ( 1яттеагп Ьястеагп, Ятттуре Ьо) ( онат С[255); // Размер выбран произвольно— // при желании его можно изменить.

1пс 1етм ястеам.цет11пе(Е, 255); 1еп = яст1ед(т) + 1," 15(1ео > а.яьяе] ( г)е1есе [) о-р' ету о.р = пем сиат[1ео); ) сатен (Ьаг) а11ос ха! ( содс « мСшмбха прм распределении памятМп"г ех1е(1)г ) о. яьяе = 1етн ) астору(о.р, с)> теецтд яетеав; ) Как видим, операция вывода строки очень проста. Однако следует обратить внимание, что параметр о передается по ссылке. Поскольку объекты класса аеттуре довольно велики, их эффективнее передавать по ссылке, а не по значению. По этой причине все параметры, имеющие тип ввттуре передаются только ло ссылке.

(Разрабатывая функцию, параметрами которой являются объекты класса веттуре, следует иметь в виду это обстоятельство.) Процедура ввода строки немного сложнее. Сначала строка считывается с помощью функции оее1)зпеСн Длина наибольшей строки, которую можно ввести, ограничена 254 символами плюс нулевой байт, служащий признаком конца строки.

Как указано в кол»- ментариях„эту величину можно изменить. Символы считываются до тех нор, пока не встретится символ перехода ~ ~а новую сгроку. Если при вводе строки оказалось, что размер памяти, занятой объектом о, нслостаточен, она освобождается, и строке выделяется лругой участок памяти, имеющий более крупный размср. Затем в него копируется новая строка. Функции присваивания Объекты класса ос*туре можно присваивать двумя способами.

Во-нервых, объекту класса веттуре можно присвоить другой объект этого типа. Во-вторых. ему можно Глава 39. Интеграция навык классов: пользовательский класс для работы со строками 7И присвои~ь строку, взятую в кавычки. Для выполнения этих операций предназначены два варианта перегруженной опера~орной функции орегаеог () . // Грисвоение объекгу класса ясгтуре другого объекта этого типа. ЯегТуре ЯсгТуреззорегаеог=(ЯСгТуре Ьо) яегтуре Сешр(о.р)з 1<(о.в<ге > в<ге) бе1еее [) рз // Освобождаем память.

егу ( р = пем снах[о. вазе) з ) сассЬ (Ьаз) а11ос ха) ( созе « "Ошибка при распределении ззамяти1п"з ехзе(1); ) в?зе = о.в<вез ) всгсру(р, о.р)з вегсру(еешр.р, о.р); геспгп сешрз ) // присвоение объекту класса ясгтуре строки, // взятой в кавычки. ЯегТуре ЯегТуреззорегаеог=(снаг *з] < Тпе 1еп .= всг1еп(в) + 1; <г(вз.зе < 1еп) ( з)е1есе () рз егу ( р = пем с?заг[1еп)з саесЬ (Ьас? а11ос ха) ( сопс « "Ошибка при распределении замятино"з ехз.е(1) з в<ге = 1епз ) зггсру(р, з); гесигп *сиз.вз Обе функции сначала проверяют, помещается ли присваиваемый объект в участке памяти, адресованном указателем р. Если нет, старый участок освобождается, и строке выделяется новая область памяти. Затем строка копируется в объект и функция возвращает результат. Таким образом, следующие виды присваивания являются вполне допустимыми.

ЯегТуре х("проверка"), уз у = хз // Объекту класса Яегтуре присваивается другой // объект класса Ясгтуре. х = "новая строка для объекта х"; // Объекту класса Бегтуре // присваивается строка, взятая в кавычки. Каждая из функций присваивания возвращает присваиваемое значение (т.е. значение правого операнда).

Характеристики

Тип файла
DJVU-файл
Размер
7,03 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6553
Авторов
на СтудИзбе
299
Средний доход
с одного платного файла
Обучение Подробнее