Главная » Просмотр файлов » Г. Шилтд - Самоучитель C++ (DJVU)

Г. Шилтд - Самоучитель C++ (DJVU) (1114955), страница 39

Файл №1114955 Г. Шилтд - Самоучитель C++ (DJVU) (Г. Шилтд - Самоучитель C++ (DJVU)) 39 страницаГ. Шилтд - Самоучитель C++ (DJVU) (1114955) страница 392019-05-08СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

Если оператор-функция любого типа является членом класса, то левый операнд, который неявно передается через указатель, 1Ы, является объектом, генерирующим вызов оператор-функции. Это подразумевает, что левый операнд является объектом этого класса. Поэтому, если перегруженная оператор-функция является членом класса, тогда левый операнд должен быть объектом этого класса. Однако, когда вы создаете пользовательскую функцию вывода, левый операнд становится потоком, а не объектом класса, а правый операнд — объектом, который нужно вывести.

Именно поэтому пользовательская функция вывода не может быть функцией-членом. То, что пользовательская функция вывода не может быть функцией-членом на первый взгляд кажется серьезным изъяном С++, поскольку подразумевает, что все данные класса, выводимые в поток через эту функцию, должны быть открытыми, нарушая тем самым ключевой принцип инкапсуляции. Однако это не так. Несмотря на то, что пользовательские функции вывода не могут быть членами класса, для работы с которым они разработаны, они могут быть дружественными классу. В подавляющем большинстве реальных ситуаций, с которыми вам придется столкнуться при программировании ввода/вывода, перегружаемая пользовательская функция вывода будет дружественной классу, для которого она создана. !; ~)~Й1М6$3М;,' 1. Для начала рассмотрим простой пример, в котором для класса соотг, разра- ботанного в предыдущей главе „создается пользовательская функция вывода: Использование дружественной функции вывода для объектов типа соотс) 1)ьпс1пйе (ъоаСяал~> ыаьпЧ пал~еврасе вбо; с1авв соотб ( ьпс х, у; раЫьс: соотб1) ( х= О; у= Ор ) соотб(ьпб 1, гпс 1) 1 х = 1; у = Ог ) гтгепс1 оа1геаи йоретаеот<с1саетеап таслеал, спето оо) Глава 8.

Введение в систему ввода/вывода С++ овсгеюп аорегассг«(озггеагп авггеавн соогд оЬ) зггеагп «сЬ.х « ", " «оЬ.у « '~п'; гегцгп зггеапз; )п1 паьп 1) соогй а(1, 1), Ь110, 23); сопя « а « Ь; ге"игп 0; В результате выполнения программы на экран выводится следующее: 1 1О, 23 Пользовательская функция вывода этой программы иллюстрирует одну очень важную для создания ваших собственных функций особенность: их нужно разрабатывать, возможно, более обобщенными. В данном конкретном случае инструкция ввода/вывода внутри функции вставляет значения х и у в поток з1геаш, который и является передаваемым в функцию потоком. Как вы увидите в следующей главе, та же самая пользовательская функция вывода, которая в нашем примере используется для вывода информации на экран, может использоваться и для ее вывода в любой поток.

Тем не менее, начинающие программисты иногда пишут пользовательскую функцию вывода для класса свого следующим образом: оьггеагп аоре:асов« (овггеат азггеата, соотг) оЬ) Г сонг «оЬ.х « ", " « оЬ.у « '',п'; гегпгп зггеагп; В этом случае выражение жестко запрограммировано на вывод информации на стандартное устройство вывода, связанное с классом сов1. Это ведет к тому, что другие потоки не могут воспользоваться вашей функцией. Вывод очевиден, следует делать свои функции, возможно, более обобщенными, поскольку это никогда не повредит, а иногда может оказаться полезным.

2. В следующей версии предыдущей программы, пользовательская функция вывода не является дружественной классу свого. Поскольку у пользовательской функции вывода нет доступа к закрытой части класса свого, переменные х и у приходиться делать открытыми. // Создание не дружественной функции вь:вола для объектов типа соогд 41пс1пс)е <1свггеав> ив)пя пагпезрасе згс); Самоучитель С++ с1аья соотй рцЬ11с: 1пс х, у; У/ должны быть открытьпю соотй() ( х = О; у = Оу ) соотй (1пе 1, 1пя з) ( х = 1; у = 3' Пользовательская функция вывода для объектов класса соодй ояскеал йоретатот«(оясгеап йяятеав, соогй оЬ) яЬгеап « оЬ.х « ", " « оЬ.у « 'хп'; гегцгп я(геагп; 1пя та1п() соолй а (1, 1), Ь(10, 23) соцЬ « а « Ь; гесигп О; 3. Возможности пользовательских функций вывода не ограничиваются выводом текстовой информации.

Они могут выполнить любое действие или преобразование, необходимое для вывода информации в том виде, который требуется из-за особенностей устройства или ситуации. Например, совершенно разумно создать пользовательскую функцию вывода для отправки информации на плоттер. В этом случае, кроме собственно информации, функция передаст предназначенные для управления плоттером коды. Чтобы вы могли почувствовать вкус к такого рода функциям, в следующей программе создается класс $г!апф(е, в котором хранится ширина и высота прямоугольного треугольника.

Пользовательская функция вывода этого класса выводит треугольник на экран. // Эта программа рисует прямоугольные треугольники Фйпс1ийе <1оясгеапо. ця|пя пагпеярасе вдй; с1аяя Сг)апЫ)е 1п( Ье)яМ, Ьаяе; риЬ11с: сх1апд1е (1псЬ, (пс Ь) ( Ьефдпв = Ьр Ьаяе= Ь; тлйепй оявтеат йоретасот« (оявлеатп йясхеав, вл апд1е оь; рисование треугольника ояялеат йоретаСот«(оявлеат йя'стеал, втйапд1е оЬ) ( 1лв 1, 1, и, ку Глава В, Введение а систему ввода/вывода Сн- 1 = 3 = оЬ.Ьаае — 1; гог(Ь=оЬ.Ье1дЬс — 1; )т; )т --) тог1)~=-х; К; К --) атгеагп « а1геатп « ' й'1з! =1) [ аког Ж=3 — т — 1 ~ )<~ к ) ебгеатп« в ген« ' * '; всгеагз« ' ~п'; гог1)г=от )«оЬ.Ьаве; 1++) аегеат « '~~п'; аегеаш « гесагп всгеааи Ьпс таа3.п1) ( Гг1апд1е ст Г5, 5), 12 (10, 1О), 13(12, 12); соа1 « г1; соас « епб1 « Г2 « егй1 « сз; ге0пгг, 0; Отметьте, что должным образом разработанная пользовательская функция вывода может быть целиком вставлена в "обычное" выражение ввода/вывода.

После выполнения программы на экран выводится следующее: Самоучитель С++ 1. В незавершенной программе имеется класс зтг(уре. для вывода строки на экран создайте пользовательскую функцию вывода: ггтпс1нйе<1ояегеай> Ипс1ийе <сяГг1пд> ()тпс1пйе <свгй11)о> ня1пд паневрасе ясй; с1авя ясгсуре ( сваг *Р; тпг 1еп; рп)о11с: ягггуре(сваг *рог); -ягггуре() (йе1еге () р; ) 1г1епй оя геап аорегагог« (овггеатп йя~геагп, япгсуре вой); ясггуре::ягг"уре(сваг ~р(.г) 1еп = ясг1еп(ргг) + 1; р = пен сваг (1еп); 1Г('р) сопс « "Свлибка внделения памяти~в"; ехз.г (1); ясгсру (р, рсг); Здесь добавьте собственную функцию вывода тпг гваьп () всгьуре я1 ("Это проверка" ), я2("Мне нравится О+~-") соаг « я1 << '~п' << я2; геспгп О; 2. Замените в следующей программе функцию зЬоио пользовательской функцией вывода: ()1пс1пйе <1ояегеага> ивтпи пал~еярасе вгй; с1авв р1апес ( ргопессей: йопЫе й1яьапсе; УУ расстояние в милях от Солила Глава 8.

Введение в систему ввода/вывода С++ 1п гечо1че; рпЫ1с: р1апег(с(опЫе г(, 1пб г) ( Мвсапсе = б; гечо1че = г; ); с1авв еагсЬ: рпЫ1с р1апеЬ ( боцЫе с1гсптпйегепсе; // окружность орбиты рпЫ1с ." еаггЬ(сопЫе о, 1пг г); р1апег(а, сугсгпл1егепсе = 2 * Йувбапсе * 3.141б; /" Перепилите Функцию впот() так, чтобы инФормация выводилась с помощью пользовательской функции вывода */ чо1с( вЬсн () сонг « "Расстояние от Солнца: " « Жвгапсе « '',и'; сопл « "Оборот вокруг Солнца: " с< гечо1че « '~п'; сонг « "Окружность орбиты: " « сугсцюГегепсе « '1п' 1пс юпа1п() ( еаггЬ оЬ(93000000, 365); сон <« оЬ; гебцгп 0; 3. Вспомните„почему пользовательская функция вывода не может быть функцией-членом.

8. 6 . Пользовательские функции ввода Точно так же, как мы перегружали оператор вывода <.<, можно перегрузить и оператор ввода ». В С++ оператор ввода » иногда называют оператором извлечения (ех/гас//оп орегагог), а функцию, перегружаюшую этот оператор, — функцией извлечения (ехггасгог/. Смысл этих терминов в том, что при вводе информации мы извлекаем данные из потока. Во избежание путаницы мы будем называть функцию извлечения пользовательской функцией ввода. Здесь показана основная форма пользовательской функции ввода: йзетезе ьорекебок>) (йзЕкеее Нвегеа~п, енз класса аооъект) ( // тело пользовательской Ф~нкцки ввода Ябб Самоучитель хеептп айжеатттт Пользовательские функции ввода возвращают ссылку на поток Ыгеа)п, который является потоком ввода.

Первый параметр тоже является ссылкой на поток ввода. Второй параметр — это ссылка на объект, получающий вводимую информацию. Так же, как и пользовательская функция вывода, пользовательская функция ввода не может быть функцией-членом. Хотя внутри такой функции может быть выполнена любая операция, лучше ограничить ее работу вводом информации. Ь В этой программе к классу соогд добавлена пользовательская функция ввода: // Добавление дружестветптой функпии ввода для объектов типа соопс( ()ьпс1пс(е <тоястеатп> пятпд патпеярасе яьо; с1аяя соолб ( 1п~ х, у; рпЫЪс т соотс(() ( х = О; у = О; ) соотт((э.пп 1, 1пп 3) ( х .= 1т у = зт пптепс( ояппеатп горепайот« (оят.пеатп яяслеатп, соопй о)>) Готетк( 1яспеатп аоретасоп» (тяптеатп Бяблеатп, сооЫ ас)т) оя'ьтеатп перекат.оп« (оястеатп яя пеатп, сослал о)о) ( ясгеатп « оЬ.х « ", " « ОЬ.у « 'М 'т гекнгн ясгеатп; 1яппеатп аорелайот»(тяптеатп яябвеатп, соопб ай ( сон~ « "Введите координаты: яЬгеатп » оЬ.х » оЬ.у; пепипп яппеапс 1пб тпаап() ( соогс( а(1, 1), Ь(10, 23) сонЬ « а « )>! Глжа В.

Введение стгт»а; соцс « а; гегцгп О; Обратите внимание, как пользовательская функция ввода формирует строку- приглашение для ввода данных. Хотя во многих случаях этого не требуется (или даже это нежелательно), пользовательская функция ввода показывает, как в случае необходимости почти без усложнения программы можно выдать приглашающее сообщение.

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

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

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

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