Философия C++. Практическое программирование - Книга отличается от других учебников по C++ новым подходом к изложению материала, основанным на логике и здравом смысле. Вместо простого перечисления языковых конструкций, снабженных примерами, авторы стремятся научить читателя мыслить категориями C++. Они подробно объясняют, почему проектировщики языка принимали то или иное решение, описывают типичные проблемы и пути их решения. Во втором томе рассматриваются такие темы, как обработка исключений, стандартная библиотека C++ (включая потоки ввода/вывода, контейнеры и алгоритмы STL), шаблоны, множественное наследование, RTTI, автоматизация тестирования и отладки программ, паттерны проектирования и т. д.
Название: Философия C++. Практическое программирование Автор: Эккель Б., Эллисон Ч. Издательство: Питер Год: 2004 Страниц: 608 Формат: DJVU Размер: 5,16 МБ ISBN: 5-469-00043-5 Качество: Отличное Серия или Выпуск: Библиотека программиста
Содержание:
Предисловие Цели Главы Упражнения Исходные тексты Компиляторы Языковые стандарты Благодарности От издательства Часть 1. Разработка устойчивых систем Глава 1. Обработка исключений Традиционная обработка ошибок Запуск исключений Перехват исключений Блок try Обработчики исключений Завершение и продолжение Поиск подходящего обработчика Перехват любых исключений Перезапуск исключения Неперехваченные исключения Функция terminate() Функция set_terminate() Зачистка Управление ресурсами Управление ресурсами на уровне объектов auto_ptr Блоки try уровня функций Стандартные исключения Спецификации исключений Улучшим спецификации исключений? Спецификации исключений и наследование Когда спецификации исключений не используются Безопасность исключений Программирование с учетом исключений Когда лучше обойтись без исключений Типичные применения исключений Издержки обработки исключений Итоги Упражнения Глава 2. Защитное программирование Утверждения Простая система модульного тестирования Автоматизация тестирования Система TestSuite Комплексы тестов Код TestSuite Методика отладки Трассировочные макросы Трассировочный файл Поиск утечки памяти Итоги Упражнения Часть 2. Стандартная библиотека C++ Глава 3. Строки Что такое строка? Создание и инициализация строк C++ Операции со строками Присоединение, вставка и конкатенация строк Замена символов в строках Конкатенация с использованием перегруженных операторов Поиск в строках Поиск в обратном направлении Поиск первого/последнего символа из заданного подмножества Удаление символов из строк Сравнение строк Строки и характеристики символов Пример обработки строк Итоги Упражнения Глава 4. Потоки ввода-вывода Зачем нужны потоки? Потоки ввода-вывода Операторы чтения и записи Типичное применение Построчный ввод Обработка потоковых ошибок Состояние потока Потоки ввода-вывода и исключения Файловые потоки ввода-вывода Пример обработки файлов Режимы открытия файла Буферизация Поиск в потоках ввода-вывода Строковые потоки Строковые потоки ввода Строковые потоки вывода Форматирование в потоках вывода Форматные флаги Форматные поля Переменные width, fill и precision Пример форматирования в потоках вывода Манипуляторы Манипуляторы с аргументами Создание манипуляторов Эффекторы Примеры использования потоков ввода-вывода Сопровождение исходного кода библиотеки классов Обнаружение ошибок компиляции Простая программа ведения журнала Интернационализация Расширенные потоки Локальный контекст Итоги Упражнения Глава 5. Шаблоны Параметры шаблонов Нетиповые параметры шаблонов Аргументы шаблонов по умолчанию Шаблоны как параметры шаблонов Ключевое слово typename Ключевое слово template Вложенные шаблоны Шаблоны функций Определение типа аргументов в шаблонах функций Перегрузка шаблонов функций Получение адреса сгенерированного шаблона функции Применение функции к последовательным контейнерам STL Приоритеты шаблонов функций Специализация шаблонов Явная специализация Неполная специализация и приоритеты шаблонов классов Пример Ограничение объема генерируемого кода Разрешение имен Имена в шаблонах Шаблоны и дружественные функции Идиомы программирования с применением шаблонов Характеристики Политики Псевдорекурсия и подсчет объектов Шаблонное метапрограммирование Программирование на стадии компиляции Шаблоны выражений Модели компиляции шаблонов Модель с включением Явная специализация Модель с разделением Итоги Упражнения Глава 6. Обобщенные алгоритмы Первый взгляд Предикаты Потоковые итераторы Сложность алгоритмов Объекты функций Классификация объектов функций Автоматическое создание объектов функций Адаптируемые объекты функций Другие примеры объектов функций Адаптация указателей на функции Написание пользовательских адаптеров для объектов функций Каталог алгоритмов STL Вспомогательные инструменты для создания примеров Устойчивая и неустойчивая сортировка Заполнение интервалов и генерирование значений Подсчет Копирование и перестановки Поиск и замена Сравнение интервалов Удаление элементов Сортировка и операции с отсортированными интервалами Операции с кучей Применение операции к каждому элементу интервала Числовые алгоритмы Вспомогательные алгоритмы Создание пользовательских алгоритмов Итоги Упражнения Глава 7. Обобщенные контейнеры Контейнеры и итераторы Первое знакомство Хранение строк в контейнере Наследование от контейнеров STL Классификация итераторов Итераторы в обратимых контейнерах Категории итераторов Стандартные итераторы Основные последовательные контейнеры Базовые операции в последовательных контейнерах Вектор Дек Преобразования контейнеров Проверка границ при произвольном доступе Список Перестановка интервалов Множество Выделение лексем из потока Стек Очередь Приоритетная очередь Битовые поля Контейнер bitset<n> Контейнер vector<bool> Ассоциативные контейнеры Заполнение ассоциативных контейнеров данными Отображения Мультиотображения и дубликаты ключей Мультимножества Объединение контейнеров STL Освобождение контейнеров указателей Создание пользовательских контейнеров Расширения STL Другие контейнеры Итоги Упражнения Часть 3. Специальные возможности Глава 8. RTTI Преобразования типов на стадии выполнения Оператор typeid Преобразование к промежуточным типам Указатели на void RTTI и шаблоны Множественное наследование Области применения RTTI Пример Реализация и издержки RTTI Итоги Упражнения Глава 9. Множественное наследование История Наследование интерфейса Наследование реализации Дублирование подобъектов Виртуальные базовые классы Проблемы разрешения имен Отказ от множественного наследования Расширение интерфейса Итоги Упражнения Глава 10. Паттерны проектирования Концепция паттернов Классификация паттернов Упрощение идиом Посыльный Накопитель Синглет и его разновидности Команда Команда и смягчение привязки при обработке событий Суррогатные объекты Посредник Состояние Адаптер Шаблонный метод Стратегия Цепочка ответственности Фабрика Полиморфные фабрики Абстрактные фабрики Виртуальные конструкторы Работа деструкторов Строитель Наблюдатель Идиома внутреннего класса Пример Множественная диспетчеризация и паттерн Посетитель Итоги Упражнения Глава 11. Многопоточное программирование Мотивация Параллелизм в C++ Установка библиотеки ZThreads Определение задач Программные потоки Ускорение реакции пользовательского интерфейса Исполнители Передача управления Приостановка Приоритеты Совместное использование ограниченных ресурсов Гарантия существования объектов Конфликты доступа к ресурсам Управление доступом Упрощенное программирование Синхронизация целых классов Локальная память программных потоков Завершение задач Предотвращение коллизий в потоках ввода-вывода Подсчет посетителей Завершение при блокировке Прерывание Кооперация между программными потоками Функции wait() и signal() Отношения поставщик-потребитель Решение проблем многопоточности с помощью очередей Функция broadcast() Взаимная блокировка Итоги Упражнения Список терминов Алфавитный указатель