Главная » Просмотр файлов » Б. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004

Б. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004 (1160791), страница 109

Файл №1160791 Б. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004 (Б. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004) 109 страницаБ. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004 (1160791) страница 1092019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

Такое объединение интерфейсов к набору понятий называют жирным интерфейсом (Еат и нег(асс) Я 24 А.З). Для функций в жирном интерфейсе мы можем либо обеспечить реализации по умолчанию, либо заставить реализовывать их производные классы, сделав эти функ- 496 ции чисто виртуальными, В любом случае мы получим множество функций, которые просто сообщают об ошибках во время выполнения программы.

Папример: с1агг Соп!а(пег: риЫ1с ОЬ1есг ( риЬВс: е1гисгВад ор ( соне!сбаг'р; Вад ор(сопегсйаг'рр):р(рр)() // класс исключений о!г!иа1 ооЫри! (ОЬ1есР) ( 1Ьгов Вас! ор ( ри! ), ) Ыггиа1 ОЬ)ес!' уег() ( !ЬговВад ор(где~'); ) о!г~иа1 ОЬ/есе*й орега!ог() (!пб ( !Бгов Вид ор ( ()"); ) //- ); Если мы хотим защититься от возможности того, что контейнер пе поддерживает функцию ле! (), мы должны где-то перехватить исключение Сон!а!пегхВас( ор. Те- перь мы можем написать пример класса 5Ир таким образом: !гу ( вЫ1е (ОЬ1есг* ро = рс->уе! () ) ( !/ (ВЫр'ре = дупат!с сае!<5Ыр" (ро) ) ( // используем 5Ыр ) е1ее ( // ошибка, делаем что-нибудь другое сагсЬ (Соп!а1пеггВад орй Ьас!) ( // ошибка, делаем что-нибудь другое Это скучно, и позтому проверка Вас( ар обычно располагается в другом месте.

Поло- жившись на перехват исключения где-то в другом месте, мы можем упростить дан- ный пример: оо!д/2 (Санга(пег" рс) ( вЫ!е (ОЬ!ес!" ро =рс->уе!())( 5Ырй и булат!с саег<5Ь!рй> ('ро); // используем объект кл асса 5Ыр Олнако я считаю неоправданное упование на проверку во время выполнения неэф- фективным и свидетельствующим о плохом вкусе. В подобных случаях я предпочи- таю альтернативу — статическую проверку: с!аее 5Ыр: риЬИс ОЬ1ес! ( /' ...

*/); ооЫ/! (Сои!а!лет рс) ( Глава 16. Организация библиотеки и контейнеры 497 16.2. Проектирование контейнеров иоЫ/3 )71ог<6Ь1р>" 1) шЬ11е ~51лгр*рл -1->пех1 ))) ) // испол ьзуелл 5/ир Достоинства н недостатки подхода к созданию контейнеров на основе общих базовых классов могут быть подытожены слелующим образом (см. также 9 16.5110]): Операции пад индивидуальными контейнерами приводят к затратам, связанным с вызовами виртуальных функций. — Все контейнеры должны быть производными от Сап га1пег. Это чревато применением «жирных интерфейсов», требует болы пой степени предвидения и опирается на проверку типов вовремя выполнения.

Подгонка независимо разработанных контейнероввобщиерамкивлучшемслучаеоказываетсязатруднительной(см. 9 165)12)). + Общий базовый класс Соп1а!пег облегчает взаимозаменяемость контейнеров, обеспечивающих схожие наборы операций. Контейнеры разнородны и по умолчанию не безопасны с точки зрения типов (все, на что мы можем рассчитывать — это то, что элементы относятся к типу ОЬ/ес1*). При желании безопасные с точки зрения типов и олнородные контейнеры можно определить с помощью шаблонов. — Контейнеры интрузивны (то есть каждый элемент должен относиться к производному от ОЬ|ес1 типу). Объекты встроенных типов и структуры, жестко заданные внешним образом, нельзя прямо поместить в контейнеры.

— Извлеченному из контейнера элементу, прежде чем его использовать, нужно задать соответствующилй тип, при помощи явного преобразования типов. Классы Соп1а(пеги ОЬ/ес1 могут служить основой при реализации служб для всех объектов и контейнеров. Это чрезвычайно облегчает создание универсальных служб, таких как персистентность и объектный ввод/вывод.

Как и раньше (9 16.2.1), + обозначает достоинство, а — обозначает недостаток. По сравнению с подходом, использующим несвязанные между собой контейнеры и нтераторы, метод, использующий «общего предка всех объектов», является для пользователя излишне сложным и запутанным, приводит к затратам во время выполнения и ограничивает виды объектов, которые можно поместить в контейнер.

Вдобавок, для многих классов наследование от ОЬ/ес1 означает открытие деталей реализации. Таким образом, при создании стандартной библиотеки этот подход далек от идеального. Однако не следует нелооценивать универсальность и гибкость данного подхода. Наряллу с альтернативным его можно успешно использовать во многих прикладных программах. Преимущества этого подхода проявляются там, где не так важна эффективность, как предоставляемая единым интерфейсом Сопга(пег простота и служебные функции вроде об ьектного ввода/вывода. 16.2.3.

ВТ(.'-контейнеры Контейнеры стандартной библиотеки и итераторы (часто называемые средой разработки ВТ(., 9 3,10) можно воспринимать как стремление взять лучшее из )лвух описанных выше традиционных моделей. Однако библиотека ЯТЕ была построена 5Т)., 5гапдагл) Теплр)асе 1лЬгагу — стандартная библиотека шаблонов. — Примеч. род. 498 Глава 16. Организация библиотеки и контейнеры не так. Она явилась результатом целенаправленного поиска бескомпромиссно эффективных общих алгоритмов. Стремле»п«е к эффективности привело от трудно встраиваемых виртуальных функций к небольшим часто используемым функциям доступа.

Поэтому мы не можем представить стандартный интерфейс для контейнеров или стандартный интерфейс итераторов как абстрактный класс. Вместо этого все виды контейнеров поддерживают стандартный набор базовых операций. Чтобы избежать проблем с «жирными» интерфей< ами (9 16.2.2, 9 24А В), операции, которые не могут быть эффективно реализованы лля всех контейнеров, не включены в набор ооших операций. Например, обращение по индексу введено для эес1ог, но не для 1Ы В добавок, каждый вид контейнеров обеспечивает свой собственный итератор, поддерживающий стандартный набор итерационных операций, Стандартные контейнеры не являются производными от некоторого общего базового класса. Вместо этого каждый контейнер реализует все стандартные контейнерные интерфейсы. Подобным же образом не сушествует и общего базового класса итераторов.

Использование стандартных контейнеров и итерагоров не подразумевает никакой явной или неявной проверки типов во время выполнения. Предоставление общих услуг для всех контейнеров (важный и сложный вопрос) удалось обеспечить не через общий базовый класс, а при помощи «распределителей памяти» (а1!осасогз), передаваемых как аргументы шаблона (9 19.4.3). Прежде чем входить в детали и приводить примеры программ, достоинства и недостатки ЯТ1.-подхода мояпго обобщить следующим образом; + Индивидуальные контейнеры просты и эффективны (не совсем так просты, какими могут быть по-настоящему независимые контейнеры, но так же эффективны). + Каждый контейнер обеспечивает набор стандартных операций со стандартными именами и смыслом, Доно.лнительные операцьги обеспечиваются для частных контейнерных типов по мере необходимости.

Кроме того, лля помешения независимо разработанных контейнеров в общие рамки (9 16.5 [14)) могут использоваться классы-оболочки (9 25.7.1). Дополнительная общность использования обеспечивается через стандартные итераторы. Каждый контейнер предоставляет итераторы, поддерживающие набор стандартных операций со стандартными именами и смыслом. Для каждого частного контейнерного типа определен тип нтераторов, чтобы эти итера- торы были как можно проще и эффективнее. Для удовлетворения разных нужд контейнеров в добавок к стандартным итераторам могут быть определены различные дополнительные итераторы и универсальные интерфейсы.

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

Неинтрузивные контейнеры хорошо работают со встроенными типами и жестко заданными структурами. + Интрузивцые контейнеры могут подгоняться под обшне рамки. Естественно, интрузивные контейнеры влекут за собой ограничения на типы элементов. + Каждый контейнер имеет аргумент, называемый «распределителем па»гати», который можно использовать в качестве основы для реализации услуг, необхо- 1б,З.

Вектора 16.3. Вектора Здесь вектор описывается как пример полного стандартного контейнера. Бели не утверждается обратного, все сказанное о векторе относится ко всем стандартным контейнерам. Глава 17 описывает особенности списков, мноэкеств, ассоциативных массивов и т. п. Возможности, предлагаемые вектором, — и другими подобными контейнерами— описаны довольно подробно.

Цель — дать понять, как возможные применения векторов, так и их роль в проекте стандартной библиотеки вообще. Обзор стандартных контейнеров и предлагаемых ими средств можно найти в э 17.1. Ниже ознакомление с векторами производится по этапам; типы членов, итераторы, доступ к элементам, конструкторы, операции со стеком, операции со списками, размер и емкость, вспомогательные функции и рес1ог<Ьоо!>. 16.3.1.

Типы Стандартный вектор — это шаблон, определенный в пространстве имен к1й и пред- ставленный в заголовочном файле <эес1ог>. Сначала он определяет набор стандарт- ных имен типов: !етр!а1е <с!акк Т, г!акк А = а!!оса1ог<Т» с!акк к1йэоес1ог( риИс: // типы 1урейе~Т иа!ие гуре; 1урейе/А а!!оса!ос 1уре; !урейе~1урепате Аскгее 1уре каке 1уре; 1урейе~1урепатеАсйЯегепсе 1уре йфегепсе гуре; // тип элемента // тип распределителя полтава 1урейе/Ьпр!степ!а!!оп йерепйеп1! йега1ог, // Т" 1урейе/!тр!етеп1айоп йерепйеп12 сопк1 !1ега1ог; // сопл! Т' димых контейнеру. Это чрезвычайно облегчает создание универсальных служб вроде персистентности и объектного ввода/вывода Я 19А.З).

— Не существует стандартного представления времени выполнения для контейнеров и итераторов, которое могло бы задаваться как аргумент функции (хотя там, где нужно, в частных прикладных программах такие представления для стандартных контейнеров и итераторов нетрудно определить; э' 19.3). Как и раньше, + означает достоинство, а — означает недостаток. Другими словами, контейнеры и итераторы не имеют фиксированного стандартного представления. Зато каждый контейнер обеспечивает стандартный интерфейс в. виде набора операций, так что один контейнер мояп!о использовать вместо другого. С итераторами обращаются схожим образом.

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

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

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

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