Дизайн и эволюция С++
Покупка
Тематика:
Программирование на C и C++
Издательство:
ДМК Пресс
Автор:
Страуструп Бьерн
Перевод:
Слинкин Алексей Александрович
Год издания: 2023
Кол-во страниц: 446
Дополнительно
Вид издания:
Практическое пособие
Уровень образования:
Дополнительное образование
ISBN: 978-5-89818-642-5
Артикул: 616303.03.99
В книге, написанной создателем языка C++ Бьерном Страуструпом, представлено описание процесса проектирования и разработки языка программирования C++. Здесь изложены цели, принципы и практические ограничения, наложившие отпечаток на структуру и облик C++, обсужден дизайн недавно добавленных в язык средств: шаблонов, исключений, идентификации типа во время исполнения и пространств имен. Автор анализирует решения, принятые в ходе работы над языком, и демонстрирует, как правильно применять «реальный объектно-ориентированный язык программирования». Книга удобно организована, поучительна, написана с юмором. Описание ключевых идей даст начинающему пользователю ту основу, на которой позже он выстроит свое понимание всех деталей языка. Опытный программист найдет здесь обсуждение принципиальных вопросов проектирования, что позволит ему лучше понять язык, с которым он работает.
- Полная коллекция по информатике и вычислительной технике
- ДМК Пресс. Информационные системы и технологии
- ДМК Пресс. ИТ-технологии для профессионалов
- Интермедиатор. Информационные системы и технологии (сводная)
- Интермедиатор. ИТ-технологии для профессионалов (сводная)
- Программирование
- Программирование на C и C++
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- 09.03.03: Прикладная информатика
- 09.03.04: Программная инженерия
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
Бьерн Страуструп Дизайн и эволюция С++
The Design and Evolution of C++ Bjarne Stroustrup An imprint of Addison Wesley Longman, Inc. Reading, Massachusetts • Harlow, England • Menlo Park, California Berkeley, California • Don Mills, Ontario • Sydney Bonn • Amsterdam • Tokyo • Mexico City
Дизайн и эволюция С++ Бьерн Страуструп Серия «Для программистов» Москва, 2023 2-е издание, электронное
ББК 32.973.26-018.1 С80 С80 Страуструп, Бьерн. Дизайн и эволюция С++ / Б. Страуструп ; пер. с англ. А. А. Слинкина. — 2-е изд., эл. — 1 файл pdf : 446 с. — Москва : ДМК Пресс, 2023. — (Для программистов). — Систем. требования: Adobe Reader XI либо Adobe Digital Editions 4.5 ; экран 10". — Текст : электронный. ISBN 978-5-89818-642-5 В книге, написанной создателем языка C++ Бьерном Страуструпом, представлено описание процесса проектирования и разработки языка программирования C++. Здесь изложены цели, принципы и практические ограничения, наложившие отпечаток на структуру и облик C++, обсужден дизайн недавно добавленных в язык средств: шаблонов, исключений, идентификации типа во время исполнения и пространств имен. Автор анализирует решения, принятые в ходе работы над языком, и демонстрирует, как правильно применять «реальный объектно-ориентированный язык программирования». Книга удобно организована, поучительна, написана с юмором. Описание ключевых идей даст начинающему пользователю ту основу, на которой позже он выстроит свое понимание всех деталей языка. Опытный программист найдет здесь обсуждение принципиальных вопросов проектирования, что позволит ему лучше понять язык, с которым он работает. ББК 32.973.26-018.1 Электронное издание на основе печатного издания: Дизайн и эволюция С++ / Б. Страуструп ; пер. с англ. А. А. Слинкина. — Москва : ДМК Пресс, 2016. — 446 с. — (Для программистов). — ISBN 978-5-97060-419-9. — Текст : непосредственный. Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Материал, изложенный в данной книге, многократно проверен. Но поскольку вероятность технических ошибок все равно существует, издательство не может гарантировать абсолютную точность и правильность приводимых сведений. В связи с этим издательство не несет ответственности за возможные ошибки, связанные с использованием книги. В соответствии со ст. 1299 и 1301 ГК РФ при устранении ограничений, установленных техническими средствами защиты авторских прав, правообладатель вправе требовать от нарушителя возмещения убытков или выплаты компенсации. ISBN 978-5-89818-642-5 © by AT&T Bell Labs. © Перевод на русский язык, оформление. ДМК Пресс, 2016
Содержание Предисловие .................................................................................................... 13 Благодарности ................................................................................................ 15 Обращение к читателю ............................................................................... 16 Часть I ............................................................................................................ 29 Глава 1. Предыстория C++ ........................................................................ 30 1.1. Язык Simula и распределенные системы ............................................... 30 1.2. Язык C и системное программирование ............................................... 33 1.3. Немного об авторе книги ....................................................................... 33 Глава 2. Язык С with Classes ....................................................................... 36 2.1. Рождение C with Classes ......................................................................... 36 2.2. Обзор языковых возможностей ............................................................. 38 2.3. Классы ...................................................................................................... 39 2.4. Эффективность исполнения ................................................................... 41 2.4.1. Встраивание ...................................................................................... 42 2.5. Модель компоновки ................................................................................ 43 2.5.1. Простые реализации ........................................................................... 46 2.5.2. Модель размещения объекта в памяти .................................................. 48 2.6. Статический контроль типов .................................................................. 49 2.6.1. Сужающие преобразования ................................................................ 50 2.6.2. О пользе предупреждений ................................................................... 51 2.7. Почему C? ................................................................................................ 52 2.8 Проблемы синтаксиса ............................................................................. 54 2.8.1. Синтаксис объявлений в языке C ........................................................... 54 2.8.2. Тэги структур и имена типов ................................................................. 56 2.8.3. Важность синтаксиса .......................................................................... 58 2.9. Производные классы ............................................................................... 58 2.9.1. Полиморфизм без виртуальных функций ................................................ 59 2.9.2. Контейнерные классы без шаблонов ..................................................... 60 2.9.3. Модель размещения объекта в памяти .................................................. 61 2.9.4. Ретроспектива ................................................................................... 62 2.10. Модель защиты ...................................................................................... 62
2.11. Гарантии времени исполнения ............................................................ 65 2.11.1. Конструкторы и деструкторы .............................................................. 65 2.11.2. Распределение памяти и конструкторы ................................................ 66 2.11.3. Функции call и return .......................................................................... 67 2.12. Менее существенные средства ........................................................... 67 2.12.1. Перегрузка оператора присваивания ................................................. 67 2.12.2. Аргументы по умолчанию ................................................................... 68 2.13. Что не реализовано в C with Classes ................................................. 69 2.14. Рабочая обстановка ............................................................................. 70 Глава 3. Рождение С++ ............................................................................... 73 3.1. От C with Classes к C++ .......................................................................... 73 3.2. Цели С++ .................................................................................................. 74 3.3. Компилятор Cfront ................................................................................... 76 3.3.1. Генерирование Скода ........................................................................ 77 3.3.2. Синтаксический анализ C++ ................................................................ 79 3.3.3. Проблемы компоновки ........................................................................ 80 3.3.4. Версии Cfront ..................................................................................... 80 3.4. Возможности языка ................................................................................. 82 3.5. Виртуальные функции .............................................................................. 82 3.5.1. Модель размещения объекта в памяти .................................................. 85 3.5.2. Замещение и поиск подходящей виртуальной функции ............................ 87 3.5.3. Сокрытие членов базового класса ........................................................ 87 3.6. Перегрузка ............................................................................................... 88 3.6.1. Основы перегрузки ............................................................................. 89 3.6.2. Функциичлены и дружественные функции .............................................. 91 3.6.3. Операторные функции ........................................................................ 93 3.6.4. Перегрузка и эффективность ................................................................ 94 3.6.5. Изменение языка и новые операторы .................................................... 96 3.7. Ссылки ...................................................................................................... 96 3.7.1. Lvalue и Rvalue .................................................................................... 98 3.8. Константы ................................................................................................. 99 3.9. Управление памятью ............................................................................. 101 3.10. Контроль типов .................................................................................... 103 3.11. Второстепенные возможности ........................................................... 104 3.11.1. Комментарии ................................................................................. 104 3.11.2. Нотация для конструкторов .............................................................. 104 3.11.3. Квалификация ................................................................................ 105 3.11.4. Инициализация глобальных объектов ................................................ 106 3.11.5. Предложения объявления ................................................................ 109 3.12. Языки C и C++ ...................................................................................... 111 3.13. Инструменты для проектирования языка .......................................... 114 Дизайн и эволюция С++
3.14. Книга «Язык программирования С++» .............................................. 116 3.15. Статья «Whatis?» .................................................................................. 117 Глава 4. Правила проектирования языка C++ ................................ 120 4.1. Правила и принципы ........................................................................... 120 4.2. Общие правила ................................................................................... 121 4.3. Правила поддержки проектирования ............................................... 125 4.4. Технические правила .......................................................................... 128 4.5. Правила поддержки низкоуровневого программирования ........... 132 4.6. Заключительное слово ........................................................................ 134 Глава 5. Хронология 1985–1993 гг. .................................................. 135 5.1. Введение ............................................................................................... 135 5.2. Версия 2.0 ............................................................................................ 136 5.2.1. Обзор возможностей ...................................................................... 137 5.3. Аннотированное справочное руководство ...................................... 138 5.3.1. Обзор ARM ................................................................................... 139 5.4. Стандартизация ANSI и ISO .............................................................. 140 5.4.1. Обзор возможностей ...................................................................... 143 Глава 6. Стандартизация ......................................................................... 144 6.1. Что такое стандарт? ............................................................................ 144 6.1.1. Детали реализации ........................................................................ 145 6.1.2. Тест на реалистичность .................................................................... 146 6.2. Работа комитета .................................................................................. 146 6.2.1. Кто работает в комитете .................................................................. 148 6.3. Как велась работа ............................................................................... 148 6.3.1. Разрешение имен ........................................................................... 149 6.3.2. Время жизни объектов ..................................................................... 153 6.4. Расширения .......................................................................................... 157 6.4.1. Критерии рассмотрения предложений .............................................. 159 6.4.2. Текущее состояние дел .................................................................... 161 6.4.3. Проблемы, связанные с полезными расширениями ............................. 162 6.4.4. Логическая непротиворечивость ....................................................... 163 6.5. Примеры предлагавшихся расширений ........................................... 164 6.5.1. Именованные аргументы ................................................................. 164 6.5.2. Ограниченные указатели ................................................................ 168 6.5.3. Наборы символов ........................................................................... 169 Глава 7. Заинтересованность и использование ............................. 174 7.1. Рост интереса к C++ ............................................................................ 174 7.1.1. Отсутствие маркетинга C++ ............................................................. 175 7.1.2. Конференции ................................................................................. 175 Содержание
7.1.3. Журналы и книги ............................................................................... 176 7.1.4. Компиляторы .................................................................................... 177 7.1.5. Инструментальные средства и среды программирования ...................... 177 7.2. Преподавание и изучение C++ ........................................................... 178 7.3. Пользователи и приложения ................................................................ 183 7.3.1. Первые пользователи ........................................................................ 183 7.3.2. Сферы применения C++ .................................................................... 184 7.4. Коммерческая конкуренция ................................................................. 184 7.4.1. Традиционные языки ......................................................................... 185 7.4.2. Современные языки .......................................................................... 186 7.4.3. Как выдержать конкуренцию .............................................................. 187 Глава 8. Библиотеки .................................................................................... 189 8.1. Введение ................................................................................................. 189 8.2. Проектирование библиотеки C++ ...................................................... 189 8.2.1. Альтернативы при проектировании библиотеки .................................... 190 8.2.2. Языковые средства и построение библиотеки ....................................... 190 8.2.3. Как работать с разнообразными библиотеками ................................... 191 8.3. Ранние библиотеки ............................................................................... 192 8.3.1. Библиотека потокового ввода/вывода ................................................ 193 8.3.2. Поддержка параллельности ............................................................... 196 8.4. Другие библиотеки ................................................................................ 198 8.4.1. Базовые библиотеки ......................................................................... 199 8.4.2. Устойчивость и базы данных ............................................................... 200 8.4.3. Библиотеки для численных расчетов .................................................... 200 8.4.4. Специализированные библиотеки ...................................................... 201 8.5. Стандартная библиотека ..................................................................... 201 Глава 9. Перспективы развития языка С++ ....................................... 203 9.1. Введение ................................................................................................. 203 9.2. Оценка пройденного пути .................................................................... 203 9.2.1. Достигнуты ли основные цели C++? ..................................................... 204 9.2.2. Является ли C++ логически последовательным языком? ......................... 204 9.2.3. Основная недоработка языка ............................................................ 207 9.3. Всего лишь мост? ................................................................................... 208 9.3.1. Мост нужен надолго ......................................................................... 208 9.3.2. Если C++ – это ответ, то на какой вопрос? .......................................... 209 9.4. Что может сделать C++ более эффективным ..................................... 213 9.4.1. Стабильность и стандарты ................................................................. 213 9.4.2. Обучение и приемы .......................................................................... 213 9.4.3. Системные вопросы .......................................................................... 213 9.4.4. За пределами файлов и синтаксиса .................................................... 214 9.4.5. Подведение итогов и перспективы ...................................................... 215 Дизайн и эволюция С++
Часть II ........................................................................................ 217 Глава 10. Управление памятью .............................................................. 218 10.1. Введение .............................................................................................. 218 10.2. Отделение распределения памяти и инициализации ...................... 219 10.3. Выделение памяти для массива .......................................................... 220 10.4. Размещение объекта в памяти .......................................................... 221 10.5. Проблемы освобождения памяти ...................................................... 222 10.5.1. Освобождение памяти для массивов ................................................. 224 10.6. Нехватка памяти .................................................................................. 225 10.7. Автоматическая сборка мусора ........................................................ 226 10.7.1. Необязательный сборщик мусора ..................................................... 226 10.7.2. Как должен выглядеть необязательный сборщик мусора? ..................... 228 Глава 11. Перегрузка ................................................................................. 230 11.1. Введение .............................................................................................. 230 11.2. Разрешение перегрузки ..................................................................... 230 11.2.1. Детальное разрешение ................................................................... 231 11.2.2. Управление неоднозначностью ........................................................ 233 11.2.3. Нулевой указатель .......................................................................... 236 11.2.4. Ключевое слово overload ................................................................. 238 11.3. Типобезопасная компоновка ............................................................. 239 11.3.1. Перегрузка и компоновка ................................................................ 239 11.3.2. Реализация компоновки в C++ ......................................................... 240 11.3.3. Анализ пройденного пути ................................................................ 241 11.4. Создание и копирование объектов .................................................. 244 11.4.1. Контроль допустимости копирования ................................................ 244 11.4.2. Управление распределением памяти ................................................. 244 11.4.3. Управление наследованием ............................................................. 245 11.4.4. Почленное копирование .................................................................. 246 11.5. Удобство нотации ................................................................................ 248 11.5.1. «Умные» указатели .......................................................................... 248 11.5.2. «Умные» ссылки .............................................................................. 249 11.5.3. Перегрузка операторов инкремента и декремента ............................. 252 11.5.4. Перегрузка >* ............................................................................... 254 11.5.5. Перегрузка оператора «запятая» ..................................................... 254 11.6. Добавление в C++ операторов ........................................................ 254 11.6.1. Оператор возведения в степень ....................................................... 254 11.6.2. Операторы, определяемые пользователем ........................................ 257 11.6.3. Составные операторы ..................................................................... 258 11.7. Перечисления ...................................................................................... 259 11.7.1 Перегрузка на базе перечислений ..................................................... 261 11.7.2. Тип Boolean .................................................................................... 261 Содержание
Глава 12. Множественное наследование .......................................... 263 12.1. Введение .............................................................................................. 263 12.2. Базовые классы ................................................................................... 264 12.3. Виртуальные базовые классы ............................................................ 265 12.3.1. Виртуальные базовые классы и виртуальные функции .......................... 267 12.4. Модель размещения объекта в памяти ............................................. 270 12.4.1. Размещение в памяти объекта виртуального базового класса .............. 272 12.4.2. Виртуальные базовые классы и приведение типов ............................... 273 12.5. Комбинирование методов .................................................................. 274 12.6. Полемика о множественном наследовании .................................... 276 12.7. Делегирование .................................................................................... 279 12.8. Переименование ................................................................................. 280 12.9. Инициализаторы членов и базовых классов .................................... 282 Глава 13. Уточнения понятия класса .................................................... 284 13.1 Введение ............................................................................................... 284 13.2. Абстрактные классы ............................................................................ 284 13.2.1. Абстрактные классы и обработка ошибок ......................................... 284 13.2.2. Абстрактные типы ........................................................................... 286 13.2.3. Синтаксис ...................................................................................... 288 13.2.4. Виртуальные функции и конструкторы ................................................ 288 13.3. Константные функциичлены .............................................................. 291 13.3.1. Игнорирование const при приведении типов ...................................... 291 13.3.2. Уточнение определения const ........................................................... 292 13.3.3. Ключевое слово mutable и приведение типов ..................................... 293 13.4. Статические функциичлены ............................................................... 294 13.5. Вложенные классы ............................................................................... 295 13.6. Ключевое слово inherited ................................................................... 297 13.7. Ослабление правил замещения ........................................................ 299 13.7.1. Ослабление правил аргументов ....................................................... 301 13.8. Мультиметоды ...................................................................................... 303 13.8.1. Когда нет мультиметодов ................................................................. 305 13.9. Защищенные члены ............................................................................. 307 13.10. Улучшенная генерация кода ............................................................ 308 13.11. Указатели на функциичлены ........................................................... 309 Глава 14. Приведение типов ................................................................... 311 14.1. Крупные расширения .......................................................................... 311 14.2. Идентификация типа во время исполнения ...................................... 312 14.2.1. Зачем нужен механизм RTTI ............................................................. 313 14.2.2. Оператор dynamic_cast .................................................................. 313 14.2.3. Правильное и неправильное использование RTTI ................................ 319 Дизайн и эволюция С++