В книге, написанной создателем языка C++ Бьерном Страуструпом, представлено описание процесса проектирования и разработки языка программирования C++. Здесь изложены цели, принципы и практические ограничения, наложившие отпечаток на структуру и облик C++, обсужден дизайн недавно добавленных в язык средств: шаблонов, исключений, идентификации типа во время исполнения и пространств имен. Автор анализирует решения, принятые в ходе работы над языком, и демонстрирует, как правильно применять «реальный объектно-ориентированный язык программирования». Книга удобно организована, поучительна, написана с юмором. Описание ключевых идей даст начинающему пользователю ту основу, на которой позже он выстроит свое понимание всех деталей языка. Опытный программист найдет здесь обсуждение принципиальных вопросов проектирования, что позволит ему лучше понять язык, с которым он работает.
Краткое содержание
Предисловие Благодарности Обращение к читателю Часть I Глава 1. Предыстория C++ 1.1. Язык Simula и распределенные системы 1.2. Язык С и системное программирование 1.3. Немного об авторе книги Глава 2. Язык С with Classes 2.1. Рождение С with Classes 2.2. Обзор языковых возможностей 2.3. Классы 2.4. Эффективность исполнения 2.5. Модель компоновки 2.6. Статический контроль типов 2.7. Почему С? 2.8 Проблемы синтаксиса 2.9. Производные классы 2.10. Модель защиты 2.11. Гарантии времени исполнения 2.12. Менее существенные средства 2.13. Что не реализовано в С with Classes 2.14. Рабочая обстановка Глава 3. Рождение C++ 3.1. От С with Classes к C++ 3.2. Цели C++ 3.3. Компилятор Cfront 3.4. Возможности языка 3.5. Виртуальные функции 3.6. Перегрузка 3.7. Ссылки 3.8. Константы 3.9. Управление памятью 3.10. Контроль типов 3.11. Второстепенные возможности 3.12. Языки С и C++ 3.13. Инструменты для проектирования языка 3.14. Книга «Язык программирования C++» 3.15. Статья «Whatis?»
Глава 4. Правила проектирования языка C++ 4.1. Правила и принципы 4.2. Общие правила 4.3. Правила поддержки проектирования 4.4. Технические правила 4.5. Правила поддержки низкоуровневого программирования 4.6. Заключительное слово Глава 5. Хронология 1985-1993 гг 5.1. Введение 5.2. Версия 2.0 5.3. Аннотированное справочное руководство 5.4. Стандартизация ANSI и ISO Глава 6. Стандартизация 6.1. Что такое стандарт? 6.2. Работа комитета 6.3. Как велась работа 6.4. Расширения 6.5. Примеры предлагавшихся расширений Глава 7. Заинтересованность и использование 7.1. Рост интереса к C++ 7.2. Преподавание и изучение C++ 7.3. Пользователи и приложения 7.4. Коммерческая конкуренция Глава 8. Библиотеки 8.1.Введение 8.2. Проектирование библиотеки C++ 8.3. Ранние библиотеки 8.4. Другие библиотеки 8.5. Стандартная библиотека Глава 9. Перспективы развития языка C++ 9.1. Введение 9.2. Оценка пройденного пути 9.3. Всего лишь мост? 9.4. Что может сделать C++ более эффективным Часть II Глава 10. Управление памятью 10.1. Введение 10.2. Отделение распределения памяти и инициализации 10.3. Выделение памяти для массива 10.4. Размещение объекта в памяти 10.5. Проблемы освобождения памяти 10.6. Нехватка памяти 10.7. Автоматическая сборка мусора Глава 11. Перегрузка 11.1. Введение 11.2. Разрешение перегрузки 11.3.Типобезопасная компоновка 11.4. Создание и копирование объектов 11.5. Удобство нотации 11.6. Добавление в C++ операторов 11.7. Перечисления Глава 12. Множественное наследование 12.1. Введение 12.2. Базовые классы 12.3. Виртуальные базовые классы 12.4. Модель размещения объекта в памяти 12.5. Комбинирование методов 12.6. Полемика о множественном наследовании 12.7. Делегирование 12.8. Переименование 12.9. Инициализаторы членов и базовых классов Глава 13. Уточнения понятия класса 13.1 Введение 13.2. Абстрактные классы 13.3. Константные функции-члены 13.4. Статические функции-члены 13.5. Вложенные классы 13.6. Ключевое слово inherited 13.7. Ослабление правил замещения 13.8. Мультиметоды 13.9. Защищенные члены 13.10. Улучшенная генерация кода 13.11. Указатели на функции-члены Глава 14. Приведение типов 14.1. Крупные расширения 14.2. Идентификация типа во время исполнения 14.3. Новая нотация для приведения типов Глава 15. Шаблоны 15.1. Введение 15.2. Зачем нужны шаблоны 15.3. Шаблоны классов 15.4. Ограничения на аргументы шаблонов 15.5. Устранение дублирования кода 15.6. Шаблоны функций 15.7. Синтаксис 15.8. Методы композиции 15.9. Соотношения между шаблонами классов 15.10. Инстанцирование шаблонов 15.11. Последствия введения шаблонов Глава 16. Обработка исключений 16.1. Введение 16.2. Цели и предположения 16.3. Синтаксис 16.4. Группировка 16.5. Управление ресурсами 16.6. Возобновление или завершение? 16.7. Асинхронные события 16.8. Распространение на несколько уровней 16.9. Статическая проверка 16.10. Инварианты Глава 17. Пространства имен 17.1. Введение 17.2. Для чего нужны пространства имен 17.3. Какое решение было бы лучшим? 17.4. Решение: пространства имен 17.5. Классы и пространства имен 17.6. Совместимость с С
В книге приводятся практические рекомендации по проектированию и программированию на языке C++. Изложены правила, позволяющие программисту сделать выбор между различными методами реализации программы — наследованием и шаблонами, шаблонами и указателями на базовые классы, открытым и закрытым наследованием, закрытым наследованием и вложенными классами, виртуальными и невиртуальными функциями и т.п.
Книгу "Алгоритмы на С++" 3-е издание Роберт Седжвик тщательно переписал, существенно расширил и обновил свою популярную книгу, чтобы получилось современное и исчерпывающее описание важных алгоритмов и структур данных.