А. Александреску - Современное проектирование на C++ (1119444)
Текст из файла
Современное нроеКшцрование на С++ Обобщенное программирование и прикладные шаблоны проектирования Андрей Але1ссандрес1су Издательский дом "Вильямс" Москва ° Санкт-Петербург + Киев 2002 ББК 32.973.26-018.2.75 А46 УДК 681.3.07 Издательский дом "Вильямс" Зав.
редакцией А.В. Слепцов Перевод с английского и редакция канд.физ.-мат.наук ДА. Клюшина По общим вопросам обрашайтссь в Издательский дом "Вильямс" по адресу: !пгошччй1!агпзрцЫ!зИ!па.согп, Ицр://зчзчзн.зн!1йагпзрцЫ!зИ!па.согп Александреску, Андрей. А46 Современное проектирование на С++. Серия С++ /и-.0ерт)г, т. Зл Пер. с англ. — М,: Издательский дом "Вильямс", 2002.
— 336 с.: ил. — Парал, тит. англ, 18 В)ч) 5-8459-0351-3 (рус.) В книге изложена новая технология программирования, предсташшюшая собой сплав обобщенного программирования, метапрограммирования шаблонов и объектноориентированного программирования на С++. Обобшенные компоненты, созданные автором, высоко подняли уровень абстракции, наделив язык С++ чертами языка спецификации проектирования, сохранив всю его мощь и выразительность. В книге изложены способы реализации основных шаблонов проектирования.
Разработанные компоненты воплощены в библиотеке 1л)ц, которую можно загрузить с %еЬ-страницы автора. Книга предназначена для опытных программистов на С"-+. ББК 32.973.26-018.2.75 © Издательский дом "Вильямс", 2002 (3 Ада!зоп-тУез!еу РцЪПзыпв Сошрапу, )пс 18ВХ 5-8459-0351-3 (рус,) 18ВХ 0-201-77581-6 (англ,) Все названия программных продуктов являются зарегистрированными торговыми марками ссответствуюших фирм. Никакая часть настояшего издания ни в каких целях не может быть воспроизвелена в какой бы то ни было форме и какими бы то ни было средствами, будь то электронные или механические, включая фотокопирование и запись иа магнитный носитель, если иа это иет письменного разрешения издательства Адд!зоп-'1чез(еу РцЫпИ(пв Сотрапу, 1пс. Авгьопэед ггапз)айоп Ггот !Ие Епайзь 1апвцаве еййоп рвЫ!вьем Ьу Адб!зоп-Фез!еу РцЫ(еыпв Сошрапу, 1пс, Спрут(вьг Ю2002 АП пвИВ гезегчей Хо рап оГ ГИН Ьсох тау Ье гергобцсеб ог ггапзгп)пей !и апу Гопп ог Ьу апу пзеапз, е!есггапк ог тесьайса1, !пс1вйпв РИогосору1пв, гесоп)!пв ог Ьу апу 1пгоппаг!оп э!отаве ге!печа( гунеш, е ПИош рспп!мюп Гют гас Рцы!зьег.
йвзз!ап (апвцаве еб!г!оп рцЫьИед Ьу %ййатз РвЫИЫпв Новас ассогйпв го гИе Авгеегпепг зч11И Всг! Епгегрг!зез Ыгегпагюпа1, Сорупвш © 2002 ОГЛАВЛЕНИЕ гз Часть 1. Методы 25 45 71 99 119 Часть П. Компоненты 319 329 331 Глава 1. Разработка классов на основе стратегий Глава 2. Приемы программирования Глава 3. Списки типов Глава 4. Размешение в памяти небольших объектов Глава 5. Обобшенные функторы Глава б. Реализация шаблона 81п81егоп Глава 7. Интеллектуальные указатели Глава 8. Фабрики объектов Глава 9. Шаблон АЬзггасг Расгогу Глава 10. Шаблон ЪЪ1гог Глава 11. Мультиметоды Приложение.
Многопоточная библиотека в стиле минимализма Библиография Предметный указатель 121 15! 179 217 239 255 281 СОДЕРЖАНИЕ Предисловие Скотта Мейерса Предисловие Джона Влнссндеса Предисловие Аудитория Библиотека 1.о!ц! Структура книги Благоларн ости Часть 1. Методы Глава 1. Разработка классов на основе стратегий 1.1.
Разнообразие методов разработки программного обеспечения 1.2. Недостатки универсального интерфейса 1.3. Опасно ли множественное наследование? 1.4. Преимушества шаблонов 1.5. Стратегии и классы стратегий 1.5. !. Реализация классов стратегий с помошью шаблонных параметров 1.5.2. Реализация классов стратегий с помошью шаблонных функций-членов 1.6, Расширенные стратегии 1.7. Деструкторы классов стратегий 1.8. Факультативные возможности, предоставляемые неполной конкретизацией 1.9. Комбинирование классов стратегий 1.10.
Настройка структур с помошью классов стратегий 1.11. Совместимые и несовместимые стратегии 1.12, Разложение классов на стратегии 1.!3. Резюме Глава 2. Приемы программирования 2.!. Статическая проверка диагностических утверждений 2,2. Частичная специализация шаблонов 2.3. Локальные классы 2.4. Отображение целочисленных констант в типы 2.5.
Отображение одного типа в другой 2.6. Выбор типа 2.7. Распознавание конвертируемости и наследования на этапе компиляции 2.8. Оболочка вокруг класса гуре !и!о 2.9, Классы !ЧцНТуре и ЕтргуТуре 2.10. Характеристики типов 2.10.1. 1'еализация характеристик указателей 2.10.2.
Распознавание основных типов 2.10.3. Оптимальные типы параметров 2.10.4. Удаление квалификаторов 2.10.5. Применение класса ТуреТга!!з 2.10.6. Заключение 1! 15 17 18 19 20 21 23 25 25 26 28 29 30 32 34 34 35 36 37 39 39 41 45 46 48 50 51 53 54 56 59 61 61 62 63 64 65 66 67 памяти инамической памяти 117 Часть 11. Компоненты 119 121 122 124 125 126 !31 132 134 136 137 141 2.11.
Резюме Глава 3. Списки типов 3.1. Зачем нужны списки типов 3.2. Определение списков типов 3.3. Линеаризация создания списков типов 3.4. Вычисление длины списка 3.5. Интермеццо 3.6. Индексированный доступ 3.7. Поиск элемента 3.8. Добавление элемента 3.9. Удаление элемента 3.10. Удаление дубликатов 3.! 1. Замена элемента 3.12. Частично упорядоченные списки типов 3.13. Генерация класса на основе списка типов 3.13.1. Генерация распределенных иерархий 3.! 3.2.
Генерация кортежей 3. ! 3.3. Генерация линейных иерархий 3.14. Резюме 3.15. Краткое описание класса Туре!!з! Глава 4. Размещение в памяти небольших объектов 4.!. Стандартный механизм распределения динамической 4.2. Как работает стандартный механизм распределения д 4.3. Распределитель памяти для небольших объектов 4.4. Класс С1шп!г 4.5.
Класс Р!хег!А!1осасог 4.6. Класс Ягпа!!ОЬ!А1!оса!ог 4.7. Трюк 4.8. Просто, сложно и снова просто 4.9. Применение 4.10. Резюме 4.11. Краткое описание механизма распределения памяти лля небольших объектов Глава 5. Обобщенные функторы 5.1. Шаблон Сошгпапд 5.2. Шаблон Совгпапг! в реальном мире 5.3. Вызываемые сущности в языке С++ 5.4. Скелет шаблонного класса Гипс!ог 5.5. Реализация оператора пересылки Ропе!огхорегагогО 5.6.
Работа с функторами 5.7. Один пишем, два в уме 5.8. Преобразование типов аргументов и возвращаемого значения 5.9. Указатели на функции-члены 5.10. Связывание 68 71 71 73 74 75 76 77 78 79 80 8! 82 83 86 86 91 92 95 96 99 !оо !оо 102 !Оз !06 !Го 112 !14 !15 116 Содержание 5.11. Сцепление 5.12. Первая практическая проблема; стоимость функций пересылки 5.13. Вторая практическая проблема: распределение динамической памяти 5.14. Реализация операций 13пдо и Кедо с помощью класса Гвпс!ог 5.15. Резюме 5.16, Краткое описание класса Гцпсгог Глава 6. Реализация шаблона В1а81егов 6.1. Статические данные + статические функции!= синглтон 6.2.
Основные идиомы языка С++ для поддержки синглтонов 6.3. Обеспечение уникальности синглтонов 6.4. Разрушение объектов класса 8!п81егоп 6.5. Проблема висячей ссылки 6.6. Проблема адресации висячей ссылки !!!: феникс 6.6.1. Проблемы, связанные с функцией агехй 6.7. Проблема адресации висячей ссылки (ПХ синглтон с заданной продолжительностью жизни 6.8, Реализация синглтонов, имеющих заданную продолжительность жизни 6.9.
Продолжительность жизни объектов в многопоточной среде 6.9.1. Шаблон блокировки с двойной проверкой 6.10. Сборка 6.10,1. Разложение класса Згпп81егопНо1г1ег н» стратегии 6.!0.2. Требования, предъявляемые к стратегиям класса 8!п81егопНо!бег 6.10.3. Сборка класса Япб!е1опНо!бег 6.10.4. Реализации стратегий 6.11.
Работа с классом 5!п8!е!опНод1ег 6.12. Резюме 6.13. Краткое описание шаблонного класса 8!п81егопНо!г1ег Глава 7. Интеллектуальные указатели 7,1. Сто первое описание интеллектуальных указателей 7.2. Особенности интеллектуальных указателей 7.3. Хранение интеллектуальных указателей 7 4. Функции-члены интеллектуальных указателей 7.5. Стратегии владения 7.5.1. Глубокое копирование 7.5.2, Копирование при записи 7.5.3.
Подсчет ссылок 7.5,4. Связывание ссылок 7,5.5. Разрушающее копирование 7.6. Оператор взятия адреса 7.7. Неявное приведение к типам обычных указателей 7.8. Равенство и неравенство 7.9. Отношения порядка 7.10, Обнаружение и регистрация ошибок 7.10.1. Проверка во время инициализации 7.10.2. Проверка перед разыменоваиием 7.10.3. Сообщения об ошибках 143 144 146 147 148 148 151 152 153 154 155 157 159 161 162 !64 167 168 170 171 171 172 174 175 176 177 179 179 180 182 183 185 185 186 187 189 190 192 193 195 200 202 202 203 203 Содержание 7.11. Интеллектуальныс указатели на константные объекты и константные интеллектуальные указатели 7.12. Массивы 7.13. Интеллектуальныс указатели и многопоточность 7.13.1.
Многопоточность на уровне объектов 7.13.2. Многопоточность на уровне регистрации данных 7.14. Сборка 7.14.1. Многопоточность на уровне объектов 7,14.2. Стратегия Оюпегзуйр 7.14.3. Стратегия Сопчепйоп 7.14.4. Стратегия СЬес!ц1п8 7.15. Резюме 7.16. Краткий обзор класса БшапРгг Глава 8. Фабрики объектов 8.1. Для чего нужны фабрики объектов 8.2. Фабрики объектов в языке С++: классы и объекты 8.3.
Реализация фабрики объектов 8.4. Идентификаторы типов 8.5. Обобщение 8.6. Мелкие детали 8,7. Фабрика клонирования 8.8. Использование фабрики объектов в сочетании с другими обобщенными компонентами 8.9. Резюлге 8.10, Краткий обзор шаблонного класса Расгогу 8.11. Краткий обзор шаблонного класса С!операсгогу Глава 9. Шаблон АЬвггасг Расгогу 9.1. Архитектурная роль шаблона АЬигасг Расгогу 9.2. Обобщенный интерфейс шаблона АЬзггасг Еасгогу 9.3.
Реализация класса АЬглгасграсгогу 9.4. Реализация шаблона АЪмгасг Расгогу на основе прототипов 9.5. Резюме 9.6. Краткий обзор классов АЬзггасграсгогу и Сопсгегерасгогу Глава 10. Шаблон Ч1а11ог. 10.1. Основы шаблона Чайгог 10.2. Перегрузка и функция-ловушка 10.3. Уточнение реализации: шаблон Асус!!с Ч!з!гог 10.4. Обобщенная реализация шаблона Ч!з!гог 10.5. Назад — к "простому" шаблону Ч!з!гог 10.6. Отладка вариантов 10.6. !. Функция-ловушка 10.6.2. Нестрогое инспектирование 10,7. Резюме 10.8. Краткий обзор обобщенных компонентов шаблона Ч!з!гог Глава 11. Мультиметоды 11.1.
Что такое мультиметоды? 204 205 205 205 207 209 2!О 212 2!4 214 215 216 217 218 220 221 225 227 230 231 234 235 235 236 239 239 242 245 249 252 253 255 255 26! 262 268 274 277 277 279 279 280 281 282 Содержание Предметный указатель 331 10 Содержание !1,2. Когда нужны мультиметоды 11.3. Двойное переключение по типу: грубый подход 11.4. Автоматизированный грубый подход 11.5. Симметричность грубого подхода 11.6, Логарифмический двойной диспетчер 11.6.1. Логарифмический диспетчер н наследование 11.6.2. Логарифмический диспетчер и приведение типов 11.7. Класс Гп!31зрагс1зег и симметрия 11.8.
Характеристики
Тип файла PDF
PDF-формат наиболее широко используется для просмотра любого типа файлов на любом устройстве. В него можно сохранить документ, таблицы, презентацию, текст, чертежи, вычисления, графики и всё остальное, что можно показать на экране любого устройства. Именно его лучше всего использовать для печати.
Например, если Вам нужно распечатать чертёж из автокада, Вы сохраните чертёж на флешку, но будет ли автокад в пункте печати? А если будет, то нужная версия с нужными библиотеками? Именно для этого и нужен формат PDF - в нём точно будет показано верно вне зависимости от того, в какой программе создали PDF-файл и есть ли нужная программа для его просмотра.