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

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

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

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

Иначе говоря, в качестве шаблонных параметров можно применять станлартные аргументы, например, целочисленные значения или указатели. Синтаксис такого объявления не отличается от объявления обычных паралзетров функций: необходимо лишь указать тип и имя аргумента. Рассмотрим один из наиболее удачных способов реализации безопасных обобщенных массивов, позволяющий задавать размер массива. Глава 18. Шаблоны // Демонстрация стандартных шаблонных параметров. Еъпс1пбе <Тозехеаш> Еьпс1пбе <свеб11Ь> пз1пс пзшезрасе веб; // Здесь целочисленный аргумент ззхе является стандартным.

Сешр1ахе <с1азв АТуре, Тпе зххе> с1азь аеуре ( АТуре а(в1зе]; // Длина массива передается через параметр зхзе. риЫТс: асуре () ( хедззеех зпе 1; Гох(1=0; 1<язве; 1++) а(1] = ].; АТуре Ьорехаеох(] (1пе 1); // Проверка диапазона для объекта аеуре. Сешр1аее <с1азз АТуре, Тпе язве> Атуре ьасуре<Атуре, зззе>::орехасох [)(Тпс ( 11(1<0 ]] 1> вазе-1) ( сове « "1пзначение индекса соос « х « " выходит за пределы допустимого диапазона. 1п"; еххе(1); ) хе(ыхп а[1]; ) хпс щазп() ( аеуре<зпс, 10> ТпсоЬ; // целочисленный массив из 10 элементов. асуре<бооЫе, 15> бооЬ1еоЬ; // Массив действительных чисел, состоящий из 16 элементов. 1пе соне « "целочисленный массив: Гох(1=0; 1<10; хт+) ТпеоЬ[1) = 1; Еох(1=0; 1<10г хв+) Соне « )пеоЬ[1) « созе « '1п'г соне « "массив действительных чисел: Гох(1=0; 1<15; 1++) досЫеоЬ[1] = (бооЫе) 1/3; Еох(1=0; 1<15г 1++) соне « доиЫеоЬ[1) « " "г согс « '1п' г 1псоЬ[12) = 100; // Генерирует сообщение об ошибке.

хееихп О; Внимательно рассмотрим спецификацию шаблона асуре. Обратите внимание на то, что параметр ззве объявлен как целочислеиный. Затем этот параметр используется в классе астре для объявления массива а. Хотя параметр язве применяется в исходном коде как обычная переменная, его значение извеспю уже на этапе компиляции. Это позволяет здлавать размер массива. Кроме того„параметр заве используется при проверке диапазона индекса в операторной функции орехасохЦ ().

Обратите Часть И. Язык С++ внимание на способ, которым создаются массивы целых и действительных чисел Второй параметр задает размер каждого массива. В качестве стандартных параметров можно применять лишь цслыс числа, указатели и ссылки. Другие типы, например х1оае, не допускаются. Аргумсшы, которые передаются стандартным параметрам, лолжны содержать либо целочислсн1 ~ую константу, либо указатель, либо ссылку на глобальную функцию или объект. Таким образом, станлартные параметры можно рассматривать как константы, поскольку их значения нельзя изменять. Например, внутри функции орекаеок [) () следуюший оператор не допускается. В въве = 10/ // Ошибка Поскольку стандартные параметры считаются константами, с нх помошью можно задавать размер массива, что довольно важно в практических приложениях.

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

Например, такой. й Еешр1асе <с1авв Х=ъпс> с1авв шус1авв ( // Если прн конкретизации объекта типа шус1авв не будет указан ни один тип, используется тип впе. Стандартные аргументы также могут иметь значения по умолчанию. Они используются при конкретизации объекта, если не заданы явные значения арг/ментов. Синтаксическая конструкция, применяемая для этих параметров, не отличается от объявления функции, имеюших аргуменц ~ по умолчанию. Рассмотрим еше один вариант безопасного массива, предусматриваюший аргументы по умолчанию как для типа данных, так и для размера массива. // Демонстрация шаблонных аргументов по умолчанию. Мъпс1пбе <вовсгеаю> Фъпс1чде <свсд11Ь> ивъпп пал~еврасе всб; // Параметр типа стуре по умолчанию равен ъпе, // а переменная в1ке по умолчанию равна 10.

еетр1асе <с1авв артуре=зле, зпс в1хе=10> с1авв аеуре стуре а[авве)г // Размер массива передается аргументом язве. риЬ11с: а суре () ( гедъвеег 1пе 1/ Гох(1=0; 1<язве/ 1++) а[1] = 1; ) ятуре Ьорехасог[)(1пе 1); ); // Проверка диапазона для объекта аеуре. Сешр1асе <с1авв Лтуре, зпс въве> атуре ааеуре<лтуре, язве>::орегаеог[)(зпе 1) Глава 18. Шаблоны тт (1<0 ) ) 1> в[хе-1) ( соса « " хпвяачеяие индекса соде « 1 « ' выходит за пределы допустимого даипазояа.Хп"; ехьа(1); теьцтп а[1); 1па тайп() ( аеуре<ьпс, 100> ьпааттау // целочисленный массив // из 100 племен.оя.

аауре<с)опЫе> боцЬ1еахтау: // Массив действительных чисел, // размер залая по умолчанию. аауре<> бехатхау; // Г.'с умолчанию объявляется целочисленный // массив„ ссстояюий из 10 элементов. 1пс 1; соса « "целочисленный массив: тох(1=ОЙ 1<100; 1++) уптаттау[1) хох(>=0; 1»100у х++) соцс « 1пааттау[[) « соцс « 'Хп'; соцс « "Массив действительных чисел: хох(1=-О; ><10; тъъ) йоцЫеаттау[1) = (боцЫе) т/3; хох(1=0; 1<10; 1++) соцс <» цопЫеатхау[ 1) « попс «' 'хп'; соца « "Массив ло умолчанию: хот(т=О; ><10; 1++) дехаттау[1) = 1; хот(1=0: 1<10; 1>ъ) соиа « оехатхау[1) « соса « 'хп'г теситп 0; ) Обратите внимание на с)року в аетр1асе <с1азз Атуре=зла, [пх зз те=10> с1асв асуре ( Здесь тип в/туре по умолчанию является типом тпс, а переменная е1ве равна )О.

Как демонстрирует программа, объекты клааса асуре можно создать тремя способами. ° Явно задавая тип и размер массива. ° Явно задавая тип массива, используя размер по умолчанию. ° Используя тип и размер массива, установленные по умолчанию. Применение аргументов по умолчанию (особенно типов) повышает универсальность шаблонных классов. Если некий тип используется чаще других, его можно задать по умолчанию, предоставив пользователю самому конкретизировать другие типы. Явные специализации классов Как и при использовании шаблонных функций, можно создать явную специализацию обобщенного класса. Для этого, как и прсжлс, применяется конструкция веер1асе<>.

// Демонстрация специализации класса. Фхпс1цое <Есзстеап» Часть П. Язык С++ цвапд пащеврасе всб; сещр1аее <с1авв Т> с1авв щус1авв Т х; рцЬ11с: щус).авв(Т а) ( соне « "Внутри обобщенного класса щус1авв1п"; х=а: ) Т деехО ( геецхп х; ) ); // Явная специализация Лля типа 1пе. сещр1асе <> с1авв щус1авв<апс> ( 1пс х; рцЬ11с: щус1авв(апе а) ( сове « 'Внутри специализации щус1авв<1пе>хп"; к=а*а; ) 1пе деех() ( хегцтп х; ) 1пс ваап() ( тус1авв<доцЬ1е> б(10.1); соцс « "с(оцЬ1е: " « б.деех() « "1Мп'; щус1авв<впс> 1(5); сове « "Тпе: " « Т.десх() « "1п"; геецхп 0; ) Программа выводит ца экран слсдуюшис результаты Внутри обобщенного клаесса щус1авв боцЬ1е: 10.1 Обратите внимание ца следуюшую строку программы.

й сещр1асе <> с1авв тус1авв<апс> ( Она ссюбшает компилятору, что создается явная целочисленная специализация обобшениого класса гаус1авв. Такая же синтаксическая конструкция применяется для любой другой специализации класса. Яиия специализация класса расширяет возможности обобшеиных классов. поскольку она позволяет обрабатывать одну или две особые ситуации, предоставляя компилятору автоматически генерировать остальные специализации. Если программе потребуется слишком много специализаций, возможно, следует вообше отказаться ог обобшснных классов.

~~в Ключевые слова $урепаве и ехроп Сравнительно недавно в язык С++ были включены ключевые слова, связанные с шаблонами: еурезипае и ехрохе, имеющие особое значение для программирования. Кратко рассмотрим каждое из них. Глава 18. Шаблоны Ключевое слово еурепаве используется в лвух ситуациях. Во-первых, как указывалось ранее, оно может заменять ключевое слово ехава в объявлении шаблона. Например, шаблонную функцию аиарегдв() можно определить так. гевр1аге <гурепаве х> чо1г) аиарагдв(х ьа, х ьЬ) Х Гевр; гевр = а; а =. Ь; Ь = гевр; ) Здесь ключевое слово еурепаве задает обобщенный тип х. В этом контексте кчючевые слова с1авв и еурепаве не различаются.

Во-вторых, ключсвос слово еурепаве информирует компилятор о том, что некос имя используется в объявлении шаблонного класса в качестве имени типа, а не объекта. Рассмотрим пример. Я Гурепаве Х;:Бате еовеОЬЗесс; Здесь имя х: циаме используется в качестве имени типа. Ключевое слово еироге может предшествовать объявлению ееврзаее. Оно позволяет использовать шаблон из другого файла, повторяя лишь его объявление, а нс все определение.

Мощь шаблонов Шаблоны позволяют решить одну из самых трудных задач программирования; создать код, пригодный к повторному выполнению. С помощью шаблонов можно создавать схемы, применяемые в самых разных ситуациях. Рассмотрим в качестве примера класс аеас)г. Стек, описанный в главе 11, можно было использовать лишь для хранения целых чисел.

Даже если алгоритм не зависит от типа данных, жестко заданный тип стека ограничивает его применение. Однако обобщенный класс веае)г позволяет создавать стеки любых типов. Обобщенные функции и классы обеспечивают мощный механизм, позволяющий упростить программирование. Написав и отладив шаблонный класс, вы получаете законченный программный компонент, который можно применять в разных ситуациях. Теперь программист избавлен от необходимости предусматривать отдельные реализации для разных типов данных.

Хотя синтаксис шаблонов, на первый взгляд„выглядит усграшающе, они позволя)от сэкономить время и облегчают программирование. Шаблонные функции и классы получили очень широкое применение, и их популярность продолжает расти. Например, библиотека ВТ1 (З(апг)агг) Тетр1а(е 1лЬгагу — стандартная библиотека шаблонов), являющаяся частью стандарта языка С++, как следует из ее названия, построена на основе шаблонов. И последнее: хотя шаблоны образуют дополнительный уровень абстракции, в конце концов они компилируются в высокоэффективный объектный код. зев Часть 11. Язык С++ Полный справочник по Е 1 Ф Обработка исиючительных 6работка исктонительных сггогуацгги (схссрцоп йапг)!гпй) позволяет правильно О.

реагировать на ошибки, возникающие в ходе выпщщения программы. Используя механизм исключительных ситуации, программа может автоматически вызывать процедуру обработки ошибок. Это избавляет программиста от утомительного кодирования. ~ Основы обработки исключительных ситуаций Мсхаггизм обрабогки исключительных ситуаций в языке С++ основан на трех ключсвых словах: с*у, свес)к и снхогк Фрагменты программы, подлежащие контролю, содержат блок сху. Если в ходе выполнения программы в блоке еху возникает исключительная ситуация (т.с. ошибка), она генерируется с помощью кэюггсвого слова снхоге.

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

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

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

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