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

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

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

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

Дан следуюший фрагмент программы. Приведите два переделанных варианта этого фрагмента с учетом современных требований к программам на С++, р = ша11ос[агкеод(тпв)1[ 1й(!р1 ( сонг « "Сшибка выделения памятихп"т ехИ (11 [ Теперь вам необходимо выполнить следующие упражнения и ответить на вопросы.

1. Создайте родовую функцию, возврашаюшую значение элемента, который чаше всего встречается в массиве. Глава 11. Шаблоны и обработка исключительных ситуаций Создайте родовую функцию, возвращающую сумму значений элементов массива. Создайте родовой класс для "пузырьковой" сортировки (или используйте любой другой известный вам алгоритм сортировки). Измените класс згас1 так, чтобы в стеке можно было хранить пары объектов разных типов. Напишите обычные формы инструкций ггу, сагсЬ и гЬго~ч. Опишите своими словами их функции. Еще раз измените класс згас)г.

так, чтобы переполнение и, наоборот, опустошение стека обрабатывались как исключительные ситуации. Просмотрите документацию на ваш компилятор, Проверьте, поддерживает ли он функции Феппша4ео и циехрес$ейо. Как правило, эти функции можно конфигурировать так, чтобы из них вы могли вызвать любую необходимую вам функцию. Если в случае с вашим компилятором это так, постарайтесь создать собственный набор функций завершения программы, который обеспечил бы возможность обработки необрабатываемых до этого исключительных ситуаций. Философский вопрос: в чем, по вашему мнению, при неудачной попытке выделения памяти преимущество возбуждения исключительной ситуации оператором пеи по сравнению с возвращением нуля? В этом разделе проверяется, хорошо ли вы усвоили материал этой и предыдушей глав.

1. В главе 6, раздел 6.7, пример 3 был представлен класс с безопасным мас- сивом. Переделайте его в родовой класс с безопасным массивом. 2. В главе 1 были созданы перегруженные версии функции аЬзЦ. Усовершенствуйте решение, создав родовую функцию аЬз(), которая возвращала бы абсолютную величину любого численного объекта. Глава 12 Динамическая идентификация и приведение типов В этой главе рассказывается о двух сравнительно новых инструментах С++: динамической идентификации типа (Кип-Типе Туре 1йепг111са11оп, КТТ1) и новых, более совершенных операторах приведения типов (сазг1пя орегагогз). Динамическая идентификация типа дает возможность определить тип объекта во время выполнения программы.

Новые операторы приведения типов предоставляют более безопасные и управляемые способы выполнения операций приведения типов, по сравнению с существовавшими ранее. Как вы увидите в дальнейшем, один из операторов приведения типов, а именно оператор г1упааис еав1, относится непосредственно к КТТ1, поэтому имело смысл объединить эти две темы в одной главе. Перед тем как продолжить, необходимо правильно ответить на следующие вопросы и сделать упражнения. 1. Что такое родовая функция и какова ее основная форма? 2.

Что такое родовой класс и какова его основная форма? 3. Напишите родовую функцию Иехро, возвращающую значение одного из своих аргументов, возведенного в степень другого. 4. В главе 9, раздел 9.7, пример 1 был создан класс соотг для хранения целочисленных координат. Создайте родовую версию этого класса, чтобы можно было хранить координаты любого типа. Продемонстрируйте программу решения этой задачи. 5. Кратко объясните, как совместная работа инструкций 1гу, са1сЬ и йгои обеспечивает в С++ обработку исключительных ситуаций. 6. Можно ли использовать инструкцию %гол, если ход выполнения про- граммы не затрагивает инструкции, расположенные в блоке 1гу? 7.

Для чего служат функции 1епшпйеО и иаехрес$ед()? 8. Какая форма инструкции са1сп будет обрабатывать все типы исключи- тельных ситуаций? Самоучитель С++ 358 12.1. Понятие о динамической идентификации типа Поскольку динамическая идентификация типа не характерна для языков программирования, в которых не поддерживается полиморфизм (например, С), это понятие может оказаться для вас неизвестным. В языках, в которых не поддерживается полиморфизм, информация о типе объекта во время выполнения программы просто не нужна, так как тип каждого объекта известен уже на этапе компиляции программы (вернее даже тогда, когда программа еще пишется).

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

Информацию о типе объекта получают с помощью оператора (уреЫ. Для использования оператора (уреЫ в программу следует включить заголовок <(уреш$о>. Ниже представлена основная форма оператора (уреЫ: ?уреЗ.с( (о((веке? Здесь обьектп — этот тот объект, информацию о типе которого необходимо получить. Оператор (уреЫ возвращает ссылку на объект типа туре п?$о, который и описывает тип объекта обьект.

В классе (уре Ыо определены следующие открытые члены: Ьоо1 орека~от (сопке Суре ыФо йооееке? г Ьоо1 ореке~ок!=(сопве. Суре З.пко йооееке); ЬооЗ. Ьекоке(сопв? ~уре око йобееке) ( сопве опек *пвзе(3~ Сравнение типов обеспечивают перегруженные операторы == и !=. Функция ЬеГоге() возвращает истину, если вызывающий объект в порядке сортировки расположен раньше объекта, заданного в качестве параметра.

(Эта функция обычно предназначена только для внутреннего использования. Ее возвращаемое значение вряд ли может пригодиться при операциях с наследованием или иерархиями классов.) Функция патео возвращает указатель на имя типа. Глава 12. Динамическая идентификация и приведение типов Хотя оператор $уреЫ позволяет получать типы разных объектов, наиболее полезен он будет, если в качестве его аргумента задать указатель полиморфного базового класса. В этом случае оператор автоматически возвращает тип реального объекта, на который указывает указатель.

Этим объектом может быть как объект базового класса, так и объект любого класса, производного от этого базового. (Вспомните, указатель базового класса может указывать либо на объект базового класса, либо на объект любого класса, производного от этого базового.) Таким образом, с помощью оператора 1уреЫ во время выполнения программы можно определить тип объекта, на который указывает указатель базового класса. То же самое относится и к ссылкам. Когда в качестве аргумента оператора ~уреЫ указана ссылка на объект полиморфного класса, оператор возвращает тип реального объекта, на который имеется ссылка. Этим объектом, так же как и в случае с указателем, может быть объект производного класса.

Когда оператор 1уреЫ применяют к неполиморфному классу, получают указатель или ссылку базового типа. Ниже представлена вторая форма оператора ФуреЫ, в которой в качестве аргумента указывают имя типа: туреЫ (юке еила> Обычно с помощью данной формы оператора 1уреЫ получают объект типа ~уре шЬ, который можно использовать в инструкции сравнения типов. Поскольку оператор 1уреЫ чаще всего применяют к разыменованному указателю (т. е. указателю, к которому уже был применен оператор *), для обработки положения, когда разыменованный указатель равен нулю, была придумана специальная исключительная ситуация Ьае $уреЫ, которую в этом случае возбуждает оператор $уреЫ.

Динамическая идентификация типа используется далеко не в каждой программе. Тем не менее, если вы работаете с полиморфными типами данных, она позволяет в самых разнообразных ситуациях определять типы обрабатываемых объектов. 1. В следующей программе демонстрируется использование оператора 1уреЫ. Сначала с помощью этого оператора мы получаем информацию об одном из встроенных типов данных С++ — типе ш$. Затем оператор 1уреЫ дает нам возможность вывести на экран типы объектов, на которые указывает указатель р, являющийся указателем базового класса ВавеС1авв.

// Пример использования оператора ~урсЫ Ф~лс1ис1е <1озесеав> 41лс1иде <Еуреьп~о> из1пя оаптезрасе зЕс1г ЗбО Самоучитель С~-+ с1аяя ВаяеС1аяя уугспа1 уофб 1() (); // делаем класс ВаяеС1аяя полиморфным // с1аяя Эег1уеб1: рпЫ1с ВаяеС1аяя // )й с1аяя Зек1чес(2: рпЫТс ВаяеС1аяя // 1пска5.п ( ) 1пс ВаяеС1аяя *р, ЬазеоЬ; Вегууеб1 оЬ1р Вегфуес(2 оЬ2у Вывод на экран встроенного тж~а данных сопя « "тип переменной 1 — это сопс « гуре1с)(1),паве() « епб1; О Обработка полииорфньх типов Р = йЬазеоЬт сопя « "Указатель р указывает на объект типа сопб « лурейб (*р) .пате() « епб1; йоЫ; сопс « "Указатель р указывает на объект типа сопс « сурейс( (*р),пате() « еп61( р = йоЬ2р сопл « "Указатель р указывает на объект типа ,паве() « епа1; соил « суре1б(*р) ге пгп О; Програьяиа выводит на экран следуюлг/ю информацию: Тип переменной 1 — это (п( Указатель р указывает на объект типа ВаяеС1аяз Указатель р указывает на объект типа Пег(уед1 Указатель р указывает на объект типа 0ег(уед2 Как уже отмечалось, когда в качестве аргумента оператора 1уреЫ задан указатель полиморфного базового класса, реальный тип объекта, на который указывает указатель определяется во время выполнения программы, что очевидно по выводимой на экран информации.

В качестве эксперимента за- Глава 12. Динамическая идентификация и приведение типов 361 комментируйте виртуальную функцию (О в определении базового класса ВавеОаав и посмотрите, что получится. 2. Ранее уже говорилось, что когда в качестве аргумента оператора 1уреЫ указана ссылка полиморфного базового класса, возвращаемым типом будет тип реального объекта, на который дана ссылка. Чаще всего зто свойство используется в ситуациях„когда объекты передаются функциям по ссылке.

Например, в следующей программе в объявлении функции ЪЧ)а1Турео объект типа ВавеС!ыа задан параметром-ссылкой. Это означает, что функции %))а1- Туре() можно передавать ссылки на объекты типа ВазеС1азз или типов, производных от класса ВааеС1аав. Если в операторе (уреЫ задать такой параметр, то он возвратит тип реального объекта. // Использование оператора гуреЫ со ссылкой в качестве аргумента ()1пс1иг?е <Товсгевюп> ()Тпс1ис(е <ЕуретпТо> пв)па пагпекрасе аес(? с1авв ВакеС!аьв у(гтиа1 уо(с) г() (); // делаем класс ВакеС1акк иолиморфным // с1акк ГЗег)уес)1: риЫ)с ВакеС1акк // с1акк Пег(уес)2: риЫ)с ВазеС(акз // Задание ссылки в качестве параметра функции лоЫ ИЬастуре (ВааеС1ава аоЬ) ( соп( « "оЬ вЂ” это ссылка на объект типа "; сои? « Гуреьс1(оЬ) .пюве() «епс)1; 1пс па1п() ( 1 де Ваеео1аса ЬааесЬ; цег ' кес1 ОЬ1 ) Оегтуеа2 оЬ2; Инастуре (ЬааеоЬ) ИЬастуре (оЬ1) ИЬаетуре (оЪ2) гееагп О; 362 Самоучитель С++ Программа выводит на экран следующую информацию: оЬ вЂ” это ссылка на объект типа ВаяеС)аяя оЬ вЂ” это ссылка на объект типа Оегвчес(1 оЬ вЂ” это ссылка на объект типа Оеггхе<(2 3.

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

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

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

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