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

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

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

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

((апс1п«(е <1озптеата> И(пс1иде <Гастев> н(пс!пОе <(оспап(р> пз(пя пагпезрасс зпс(т // внимание; озстеат ваап(озссеатп гастева) нСгеап~ << "Внимание: гесиги аллеапз; // Пожалуйста, не забудьте: озллеатп апопе (овсгеап язсгеатп) ( аслеап «с "Пожалуйста, не забудьте: "т Самоучитель С++ тепплп нелевой; гпп пъатп () отвелеат оил("аеас"); 1й(!оал) сопв « "Файл от~рыть невовможно~п"; тесптп 1; вывод на экран соне « асп « "Высокое напряженые ~п"; соил <с нове <с "Выключить свет1п"~ вывод в файл олс « авп <С "Высокое НапряжениЕ1П"; сап сс попе « "Вьжтаочить свет~п"; ов~.с1ове(); тесьтп О; 1. Попытайтесь адаптировать программы предыдущей главы для работы с фай- лами. 'Теперь вам необходимо выполнить следующие упражнения и ответить на вопросы. 1, Создайте манипулятор для вывода трех символов табуляции и установки ширины поля равной 20.

Продемонстрируйте работу манипулятора. 2. Создайте манипулятор для ввода, который должен считывать и отбрасывать все неалфавитные символы. При считывании первого алфавитного символа, манипулятор должен возвратить его во входной поток и закончить работу. Назовите манипулятор Пийа1рйа. 3. Напишите программу копирования текстового файла. При копировании измените регистр всех букв.

301 Глава 9. Дополнительные возможности ввода/выведав С++ 4. Напишите программу, которая считывает текстовый файл, а затем сооб- гцает, сколько раз каждая буква алфавита появляется в файле. 5. Если вы еще этого не сделали, добавьте в ваши решения упражнений 3 и 4 полный контроль ошибок. 6. Какая функция перемещает указатель считывания? Какая функция пере- мещает указатель записи? В этом разделе проверяется, хорошо ли вы усвоили материал этой и предыдуШих глав. Е Ниже приведена переработанная версия класса )пчепгогу из предыдущей главы. Добавьте функции в1огео и ге$печео.

Затем создайте небольшой файл, содержащий несколько инвентарных записей. Далее, используя произвольный доступ, по номеру записи отобразите на экране информацию об одном из элементов. гкьпс1цйе<тя~геакс> кпс1цйе<ьояе еадс> сс1пс1цйе<сяяг1пд> изгнав паксеярасе явс(; Ггс(еггае Я1аа 40 с1аяя 1пъепсогу ( сваг ьеев(Б1ХВ); ,С,С название предмета ' пя огЛапй; количество выданных на руки экземпляров аоцЬ1е сояс; цена предмета рцьььс: ьпчепеогу (сЬаг *1, гпв о, йоцЬ1е с); ввгсру(1геп~, 1); опьапй — о; сояг = с; ) чо1й я оге(Кявгеай аасгеадс); чо1й геШече (Еяггеал~ аяггеапс); егьепа оясгеап аорегагог« (ояггеам аяггеал, 1пчепсогу тг1Епй ьяггеак аорегаеог» (ьаггеапс авггеакс, 1пчепСогу аоЬ) ояггеакс аорегаеог« (ояггеанс вяегеапс, ьпчепкогу оь) ясгеаск « оЬ.1геса « ": " « оЬ.опнапй; ветел « "на руках по цене ." « оп.соак « 'М ' 302 Самоучитель С++ телплп ялтеаж1 тявгеип аоретатог» (тяегеата ья~теат, Ьпчеплоту аоЬ1 сопл « "Введите наэвание предмета: ялтеать » оЬ,тлепц сопс « "Введите число выданных экземпляров: евтеева » оЬ.опЬап61 сопя « "Введите стоимость экземпляра: яплеаы » оЬ.соял1 тесптп яслеат1 2.

Необязательное задание. Создайте класс я1аеЫ для хранения символов в файле, а не в массиве. Глава 10 Виртуальные функции В этой главе рассматривается следующий важный аспект С++: виртуальные функции (тг~иа1~ипслот). Виртуальные функции важны потому, что они используются для поддержки динамического полиморфизма (гцп-г1те ро1ушогр111яп). Как вы знаете, в С++ полиморфизм поддерживается двумя способами. Во-первых, при компиляции он поддерживается посредством перегрузки операторов и функций.

Во-вторых, во время выполнения программы он поддерживается посредством виртуальных функций. Здесь вы узнаете, как с помощью динамического полиморфизма можно повысить гибкость программ. Основой виртуальных функций и динамического полиморфизма являются указатели на производные классы. Поэтому эта глава начинается с обсуждения указателей на производные классы.

Перед тем как продолжить, необходимо правильно ответить на следующие вопросы и сделать упражнения. 1. Создайте манипулятор для вывода чисел в научной нотации с символом Е в верхнем регистре. 2. Напишите программу для копирования текстового файла. В процессе копирования преобразуйте каждый символ табуляции в соответствующее число пробелов. 3. Напишите программу для поиска в текстовом файле слова, заданного в командной строке.

После выполнения программы на экране должно появиться число, обозначающее, сколько раз данное слово найдено в файле. Для простоты считаем следующее: все, что с обеих сторон окружено пробелами, есть слово. 4. Напишите инструкцию, которая устанавливает указатель записи на 234-й байт в файле, связанном с потоком опт. 5. Какие функции выдают информацию о состоянии системы ввода/вывода С++? 304 Самоучитель С-н- 6. Приведите хотя бы одно преимушество от использования функций ввода/вывода С++ по'сравнению с соответствующими функциями системы ввода/вывода языка С.

10.1. Указатели на производные классы Хотя в главе 4 довольно обстоятельно обсуждались указатели С++, одна их специфическая особенность до сих пор опускалась, поскольку она тесно связана с виртуальными функциями. Этой особенностью является следующее: указатель, объявленный в качестве указателя на базовый класс, также может использоваться, как указатель на любой класс, производный от этого базового. В такой ситуации представленные ниже инструкции являются правильными: Ьаве *р; /т указатель базового класса Ьаве Ьаве оЬ; !! объект базового класса йег1.геб бегьлед оЬ| 1т объект производного класса // Естественно, что указатель р может указывать // на объект базового класса р = ььаве оь // указатель р для объекта базового класса // Кромс баЗОВОГО КЛаееа уКаэатЕЛЬ р Можст указывать // на объект производного класса р = ~аегълеа оьг // указатель р для объекта производного класса Как отмечено в комментариях, указатель базового класса может указывать на объект любого класса, производного от этого базового и при этом ошибка несоответствия типов генерироваться не будет.

Для указания на объект производного класса можно воспользоваться указателем базового класса, при этом доступ может быть обеспечен только к тем объектам производного класса, которые были унаследованы от базового. Объясняется это тем, что базовый указатель "знает" только о базовом классе и ничего не знает о новых членах, добавленных в производном классе.

Указатель базового класса можно использовать для указания на объект производного класса, но обратный порядок недействителен. Указатель производного класса нельзя использовать для доступа к объектам базового класса. (Чтобы обойти это ограничение, можно использовать приведение типов, но на практике так действовать не рекомендуется.) И последнее: запомните, что арифметика указателей связана с типом данных (т. е.

классом), который задан при объявлении указателя. Таким образом, если указатель базового класса указывает на объект производного класса, а затем инкрементируется, то он уже не будет указывать на следующий объект производного класса. Этот указатель будет указывать на следующий объект базового класса.

Помните об этом. Глава 10. Виртуальные функции 305 !. В этой короткой программе показано, как указатель базового класса может использоваться для доступа к объекту производного класса: // Демонстрация указателя на объект производного класса ()1пс1пйе <1ояггеап~> ияпд патпезрасе з(с); с1аяя Ьаяе ( 1по рпЬ11с: готй яегх(1пс 1) ( х = 1пг ЯЕЕх() ( геспгп х; с1аяя йегЫей: рпЬ11с Ьаяе ( 1пг у; рпЬ11с: гоьй яееу(1пс 1) ( у = 1; 1пг десу () ( гегигп у; 1гА патп () Ьаяе +р) указатель базового класса Ьаяе Ь оЬ," // объект базового класса йегачей й оЬ; // объект производного класса использование указателя р для доступа к объекту базового класса р = аЬ оЬ; р->зеех(10); // доступ к объекту базового класса сепг « "Объект базового класса х: " сс р->9егх() <с ''~п'„.

использование указателя р для доступа к объекту производного класса р = ай оЬ; // указывает на объект производного класса р->яеех(ЭЭ)г // доступ к объекту производного класса // т. к. р нельзя использовать для установки у, делаем это напрямую й оЬ.весу(88); соил « "Объект производного класса х: " <с р->деЕх ( ) « сопс с< "Объект производного класса у: " « й оь,де'у() « '1п'; гегигп 0) Самоучитель С-н.

Нет смысла использовать указатели на объекты базового класса так, как показано в этом примере. Однако в следующем разделе вы увидите, почему для объектов производного класса столь важны указатели на объекты базового класса. 1. Попытайтесь запустить рассмотренную выше программу и поэкспериментируйте с ней.

Например, попробуйте, объявив указатель на производный класс, получить доступ к объекту базового класса. 10.2. Знакомство с виртуальными функциями Виртуальная функция (пг~иа~~илсйол) является членом класса. Она объявляется внутри базового класса и переопределяется в производном классе. Для того, чтобы функция стала виртуальной, перед объявлением функции ставится ключевое слово чггца1. Если класс, содержащий виртуальную функцию, наследуется, то в производном классе виртуальная функция переопределяется.

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

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

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

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