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

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

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

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

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

('5) Спроектируйте и реализуйте библиотеку для написания моделей, управ ляемых событиями. Подсказка: <(аеЬ.Ь>. Однако это старая программа, и вы можете сделать лучше, Должен быть объявлен класс (аеЬ (задача). Объект класса (авЬ должен иметь возможность сохранять свое состояние н восстанавливать его (вы можете определить функции (аейсваие )) н (аеЬггез(оге ))), так что он сможет работать как сопрограмма. Специфические задачи могут быть определены в виде объектов классов, производных от (авЬ. Программа, которая должна быть выполнена задачей, может быть объявлена в виде виртуальной функции. Должна быть реализована возможность передачи параметров новой задаче в качестве аргументов ее конструктора (илп конструкторов).

Должен иметься планировщик, реализующий концепцию виртуального времени. Введите функцию (авйсс(е(ау )!оап), которая «потребляет» виртуальное время. Будет ли планировщик частью класса !аей илц реализован отдельно. станет одним нз главных проектных решений. Задачам нужно обмениваться сообщениями. Разработайте для этого класс с!иеие (очередь). Придумайте способ, который бы позволил задаче ожидать ввод пз нескольких очередей. Научитесь обрабатывать ошибки времени выполнения некоторым стандартным образом.

Как бы вы отлаживали программу, использующую такую библиотеку? 12. (*2) Определите интерфейсы для классов (йагг!ог(воин), Моле!ег (монстр) и ОЬ)ес! (предмет, который вы можете поднять, бросить, использовать и т. п.) для ролевой игры. 13. (*1.5) Почему в 9 12.7(2) есть н класс ь«о1, и класс Ро!и!? При каких условиях будет уместно дополнить классы 5Ьаре конкретными версиями ключевых классов типа Т.(ле? 376 Глава 12. Производные классы 14. ('3) Определите в обгдих чертах различные стратегии реализации примера с 7оа1 Ьох Я 12А), основанной на идее, что каждый класс, который виден из приложения, является интерфейсом, содержащим единственный указатель на реализацию.

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

Шаблоны Здесь — Ваша цитата. — Б. Страусгггру>г Шаблоны — шаблон строк — инстанцир<>ванне — параметры шаблоны — проверка типа — шаблоны функций — выведение типов аргументов шаблона — залание аргументов шаблона — перегрузка шаблонов функций — выбор алгоритма через аргументы шаблона — аргументы шаблона по умолчанию — специализация —. наследование и шаблоны — членов-шаблоны — преобразования — организация исходного кода — советы — упражнения. 13.1.

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

Шаблоны обеспечивают непосредственную поддержку обобщенного программирования Я 2.7), то есть программирования с использованием типов в качестве параметров. Механизм шаблонов в С++ допускает испо. льзование типа в качестве параметра при определении класса или функции. Шаблон зависит только от тех свойств параметра-типа, которые он явно использует, и не требует, чтобы различные типы, используемые в качестве аргументов, были связаны каким-либо другим образом. В частности, типы аргументов шаблона не должны принадлежать к одной иерархии наследования.

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

Эти методы позволяют программисту спрятать сложную реализацию за простыми интерфейсами и открывать ее пользователю только при возникновении у него такой потребности, Например, заП ~в) может служить интерфейсом для 378 Глава 13. Шаблоны множества разных алгоритмов сортировки элементов различных типов, хранящихся в самых разнообразных контейнерах. Функция сортировки, наиболее подходящая для конкретного ц будет выбрана автоматически. Каждая существенная абстракция в стандартной библиотеке представлена в виде шаблона ! например, з!г!лп, оз!геат, сотр!ех, !!з! и тар), также как и все ключевые операции (например, сравнение строк, оператор вывода «, комплексное с,поженив, доступ к следующему элементу списка и сортировка).

Главы этой книги, посвященныс описанию библпотекп !часть П1), являются богатым источником примеров шаблонов и методов программирования. связанных с их иши)льзованием. Поэтому в этой главе уделяется большее внимание неболыпим примерам, иллюстрирующим технические аспекты шаб.тонов, и фундаментальным методам их использования: 8 13.2: Базовые механизмы определения и использования шаблонов классон. б 13.3:!Иаблоны функций, перегрузка функций и выведение типов. 8 13А: Параметры шаблона, используемые для управления поведением обобщенных алгоритмов.

8 13.5: Множественные определения, обеспечивающие альтернативные реализации шаблона. 8 13.6: наследование и шаблоны (полиморфизм времени выполнения и времени компиляции). 8 13.7: Организация исходного кода. Знакомство с шаблонами состоялось в 8 2.7.1 и 8 3.8. Подробные правила разрешения имен шаблонов, синтаксиса шаблонов и т. д. можно найти в з В.13. 13.2. Простой шаблон строк Рассмотрим строку символов. Строка является классом, который хранит символы и предоставляет операции, такие как поступ по индексу, конкатенацию и сравнение, которые мы обычно ассоциируем с понятием «строка».

Мы хотели бы реализовать такое поведение для многих наборов символов, В различных контекстах полезны строки символов со знаком, без знака, китайских иероглифов, греческих букв и т, д. Поэтому, мы хотим реализовать понятие < строка» с минимальной зависимостью от конкретного набора символов, Определение строки полагается на тот факт, что символы можно копировать, и это почти все, Таким образом, мы можем создать более общий строковый тип, если воспользуемся строкой символов из 8 11.12, обьявив тип символа параметром: !егор!иге<с!асс С> с!паз Зггглд1 сггис! 5гер, Ягер 'гер, риЬЕ!с. 8Гг!пд 11, Ягг!лд (солс! С*); Б! ггпу '1солз! 8гггпдЦ С геп!7 1гп! !' сопсй /7- Префикс !етр!а!с<с!азз С> указывает, что объявлен шаблон !!етр!а!е) и что аргумент С будет использован в объявлении как тип. После объявления С ис)и>льзуется точно также, как имена других типов.

Область видимости С простирается до конца 379 13.2. Простой шаблон отрок объявления, начинающегося с 1еепр1а1е<с1аяя С>. Обратите внимание, что 1етр1а1е<с1аяя С> означает, что С вЂ” зто имя типа, а не обязательно имя класса. Имя шаблона класса, за которым следует тпп, помещенный в угловые скобки < >, является именем класса (определяеглого шаблоном) и его можно использовать точно также, как имена друпех классов, Например: 31гспу<сЬаг> ся; 31г1пу<ипя1упе<1 слог> ия; Згг1пд<и»еЬаг 1 вя; с1аяя УеЬаг ( 11 японские символы Ват'пц'ЭсЬаг> 1я; За исключением специального синтаксиса своего имени Иг1пд<сЬаг> работает точно также, как если бы он был определен как 51г1пд нз 5 11.12. То, что мы сделали Яг1пд шаблоном, позволит нам реализовать средства, которые мы ввели для строк сЬаг, для строк с любымп символами.

Так, если мы пользуемся шаблонами стандартной библиотеки тар и 51г1па; пример с подсчетом слов нз 5 11.8 примет следующий вид; Д подсчет количество вхоледений кождого слова т1таеп 0 ( 5!г1еу<сЬаг Ьи1, тар 51г1пу<сЬаг>, т1> т, тЬ11е1ега»Виет!ЬиЯ».+; О вывод результата Вариант для наших японских символов,УсЬаг будет выглядеть так: О подсчет количество вхождении каждого слово 1п1 та1п ',) ( 31ггпу<дсЬаг> Виу", тар<31г1пд<дсЬаг>, т1> т; тЬ11е 1с1п»ВиЛ т1ЬиЯ»-»-; /1 вывод результата Стандартная библиотека предоставляет шаблон класса Ьая1с я1г1пу, который подобен $1г1па Я 11.12, 9 20.3).

Б стандартной библиотеке я1г1псх определен как синоним Ьая1с я1г1пц<сЬаг>: гуреде1 Ьая1с я1г1пу<сЬаг> я1ппрд что позволит нам написать программу подсчета слов следующим образом: 0 подсчет количество вхождетт каждою елово 1п1та1п Ь я1г1пд Ьиб тар я1г1пу,1пс> еп; тЬ11е ~с1п ЬиЯт!ЬиД+»ч 0 вывод резулыпото Глава 13. Шаблоны 380 Как правило, 1урес(е/ является полезным инструментом сокращения длинных имен классов, сгенерированных из шаблонов. Довольно часто мы предпочитаем не знать о том, как определен тип, и 1урег!е/позволяет нам скрыть тот факт, что тип генерируется из шаблона. 13.2.1. Определение шаблона Класс, генерируемый из шаблона класса, является совершенно нормальным классом. Поэтому использование шаблона не подразумевает каких-либо дополнительных механизмов времени выполнения сверх тех, что использовались бы для эквивалентного написанного «вручную» класса. С другой стороны, использование шаблонов не подразумевает обязательного уменьшения объема сгенерированного кода.

Как правило, неплохой идеей является протестировать конкретный класс, например Яг(пй, до преобразования его в шаблон ($1г!пи<С>). Поступая таким образом, мы решаем многие проблемы проектирования и обнаруживаем большую часть ошибок кода в контексте конкретного примера. Такой способ отладки знаком всем программистам, и большинству людей проще иметь дело с конкретными примерами, чем с абстрактными концепциями. Позднее, мы сможем решить многие проблемы, возникающие из-за обобщения, не отвлекаясь на обычные ошибки. Лналогично, при попытках разобраться в шаблоне, бывает полезно представить его поведение для конкретного типа аргумента, например сйаг, до того как пытаться осознать шаблон во всей его общности.

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

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

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

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