Данная книга представляет собой продолжение вышедшей ранее книги Решение сложных задач на C++. В форме задач и их решений рассматриваются современные методы проектирования и программирования на C++. В книге сконцентрирован богатый многолетний опыт программирования на C++ не только самого автора, но и всего сообщества программистов на C++, так что некоторые рекомендации автора могут показаться неожиданными даже опытным программистам-профессионалам. Автор рассматривает и конкретные методики, приемы и идиомы программирования, однако основная тема книги - это стиль программирования, причем в самом широком понимании этого слова. Особое внимание во всех задачах книги уделено вопросу проектирования, которое должно обеспечить максимальную надежность, безопасность, производительность и сопровождаемость создаваемого программного обеспечения. Книга рассчитана в первую очередь на профессиональных программистов с глубокими знаниями языка, однако она будет полезна любому, кто захочет углубить свои знания в данной области.
Название: Новые сложные задачи на C++ Автор: Саттер Г. Издательство: Вильямс Год: 2005 Страниц: 272 Формат: PDF Размер: 12,5 МБ ISBN: 5-8459-0823-Х Качество: Отличное Серия или Выпуск: C++ In-Depth
Содержание:
Предисловие Стиль или суть? Метод Сократа Как читать данную книгу Благодарности Обобщенное программирование и стандартная библиотека C++ Задача 1. Вектор: потребление и злоупотребление Вопрос для новичка Вопрос для профессионала Обращение к элементу вектора Увеличение размера вектора Резюме Задача 2. Строчный двор. Часть 1: sprintf Вопрос для новичка Вопрос для профессионала Радости и печали sprintf Задача 3. Строчный двор. Часть 2: стандартные альтернативы Вопрос для профессионала Альтернатива № 1: snprinif Альтернатива № 2: sid::siringstrcam Альтернатива № 3: std::strsiream Альтернатива № 4: boosi::lexical_cast Резюме Задача 4. Функции-члены стандартной библиотеки Вопрос для новичка Вопрос для профессионала Игры с mem_fun Используйте mem_fun, но не со стандартной библиотекой Использование указателей на функции-члены - но не со стандартной библиотекой Резюме Задача 5. Красота обобщенности. Часть 1: Азы Вопрос для новичка Вопрос для профессионала Задача 6. Красота обобщенности. Часть 2: Достаточно ли универсальности? Вопрос для профессионала Задача 7. Почему не специализируются шаблоны функций? Вопрос для новичка Вопрос для профессионала Перегрузка и специализация Пример Димова-Абрамса Мораль сей басни такова… Резюме Задача 8. Дружественные шаблоны Вопрос для новичка Вопрос для профессионала Исходная попытка В «темных углах» Причина 1: не всегда работает Причина 2: удивляет программистов Причина 3: удивляет компиляторы Отступление: проблема в пространстве имен Два неверных обходных пути Резюме Задача 9. Ограничения экспорта. Часть 1: основы Вопрос для новичка Вопрос для профессионала Рассказ о двух моделях Пояснение на примере Использование экспорта Проблема первая: открытый исходный текст Проблема вторая: зависимости и время построения Резюме Задача 10. Ограничения экспорта. Часть 2; взаимосвязи, практичность и советы по использованию Вопрос для новичка Вопрос для профессионала Начало: 1988-1996 гг. 1996 г. Опыт работы с экспортом До чего доводит экспорт Трудность корректного использования Потенциальные преимущества экспорта Мораль Вопросы и приемы безопасности исключений Задача 11. Попробуй поймай Вопрос для новичка Вопрос для профессионала Резюме Задача 12. Безопасность исключений: стоит ли овчинка выделки? Вопрос для профессионала Гарантии Абрамса Какая именно гарантия нужна Задача 13. Прагматичный взгляд на спецификации исключений Вопрос для новичка Вопрос для профессионала Нарушение спецификации Применение Проблема первая - призраки типов Проблема вторая - (не)понимание Копнем поглубже Резюме Разработка классов, наследование и полиморфизм Задача 14. К порядку! Вопрос для новичка Вопрос для профессионала Резюме Задача 15. Потребление и злоупотребление правами доступа Вопрос для новичка Вопрос для профессионала Преступник № 1: фальсификатор Преступник № 2: карманник Преступник № 3: мошенник Персона грата № 4: адвокат Не нарушай Задача 16. Крепко закрыт? Вопрос для профессионала Доступность Видимость И снова доступность Резюме Задача 17. Инкапсуляция Вопрос для новичка Вопрос для профессионала Место инкапсуляции в объектно-ориентированном программировании Открытые, закрытые или защищенные данные? Преобразование в общем случае Актуальный момент Резюме Задача 18. Виртуальность Вопрос для новичка Вопрос для профессионала Обычный совет о деструкторах базовых классов Виртуальный вопрос № 1: открытость или закрытость? Виртуальный вопрос № 2: деструкторы базовых классов Резюме Задача 19. Не можешь - научим, не хочешь - заставим! Вопрос для новичка Вопрос для профессионала Неявно генерируемые функции Спецификации исключений неявно определенных функций Неявный конструктор по умолчанию Неявный копирующий конструктор Неявный копирующий оператор присваивания Неявный деструктор Член auto_ptr Семейные проблемы Не хочешь - заставим! Резюме Задача 20. Контейнеры в памяти. Часть 1: уровни управления памятью Вопрос для новичка Вопрос для профессионала Диспетчеры памяти и их стратегии: краткий обзор Выбор стратегии Резюме Задача 21. Контейнеры в памяти. Часть 2: какие они на самом деле? Вопрос для новичка Вопрос для профессионала Что попросишь, то получишь? Память и стандартные контейнеры: теория Память и стандартные контейнеры: практика Резюме Задача 22. Новый взгляд на new. Часть 1: многоликий оператор new Вопрос для новичка Вопрос для профессионала Размещающий, обычный и не генерирующий исключений оператор new Оператор new, специфичный для класса Сюрприз сокрытия имен Резюме Задача 23. Новый взгляд на new. Часть 2: прагматизм в управлении памятью Вопрос для новичка Вопрос для профессионала Исключения, ошибки и new (nothrow) Теория и практика Что надо проверять Резюме Оптимизация и эффективность Задача 24. Константная оптимизация Вопрос для новичка Вопрос для профессионала const: ненавязчивый сервис Как const может оптимизировать Резюме Задача 25. inline Вопрос для новичка Вопрос для профессионала Краткий обзор Ответ А: во время написания исходного текста Ответ Б: во время компиляции Ответ В: во время компоновки Ответ Г: при инсталляции приложения Ответ Д: в процессе работы Ответ Е: в некоторое другое время Резюме Задача 26. Форматы данных и эффективность. Часть 1: игры в сжатие. Вопрос для новичка Вопрос для профессионала Различные способы представления данных Задача 27. Форматы данных и эффективность. Часть 2: игры с битами Вопрос для профессионала BitBuffer, убийца битов Попытка № 1: использование unsigned char Попытка № 2: использование стандартного контейнера упакованных битов Плотная упаковка Резюме Ловушки, ошибки и головоломки Задача 28. Ключевые слова, не являющиеся таковыми Вопрос для новичка Вопрос для профессионала Зачем нужны ключевые слова Ключевые слова C++ Зарезервированные комментарии Резюме Задача 29. Инициализация ли это? Вопрос для новичка Вопрос для профессионала Базовый механизм заполнения Не инициализация Корректное заполнение Резюме Задача 30. Двойная точность - вежливость программистов Вопрос для новичка Вопрос для профессионала Два слова о float и double Колесо времени О суживающем преобразовании типов Резюме Задача 31. Сумеречное состояние… кода Вопрос для профессионала Мотивация Макросам наплевать… Резюме Задача 32. Небольшие очепятки и прочие курьезы Вопрос для профессионала Задача 33. Оооопeраторы Вопрос для новичка Вопрос для профессионала Правило «максимального глотка» Операторные шутки Злоупотребление операторами Дополнительный вопрос Резюме Изучение конкретных примеров Задача 34. Индексные таблицы Вопрос для новичка Вопрос для профессионала Небольшая проповедь о ясности Разбор индексных таблиц Исправление механических ошибок Улучшение стиля Резюме Задача 35. Обобщенные обратные вызовы Вопрос для новичка Вопрос для профессионала Качества обобщенности Разбор обобщенных обратных вызовов Улучшение стиля Исправление механических ошибок и ограничений Резюме Задача 36. Объединения Вопрос для новичка Вопрос для профессионала Основные сведения Построение объединений Разбор кола Эти хитрые имена Использование boost::any Размеченные объединения Алсксандреску Резюме Задача 37. Ослабленная монолитность. Часть 1: взгляд на std::siring Вопрос для новичка Вопрос для профессионала Избегайте чрезмерно монолитных конструкций Класс siring Резюме Задача 38. Ослабленная монолитность. Часть 2: разбор std::siring Вопрос для новичка Вопрос для профессионала Членство - быть или не быть Операции, которые обязаны быть членами Операции, которые следует сделать членами Спорные операции, которые могут не быть ни членами, ни друзьями Задача 39. Ослабленная монолитность. Часть 3: уменьшение std::siring Вопрос для новичка Вопрос для профессионала Операции, которые могут не быть членами resize assign и +=/append/push_back insert Небольшой перерыв Задача 40. Ослабленная монолитность. Часть 4: новый std::string Вопрос для новичка Вопрос для профессионала Прочие операции, которые могут не быть членами Небольшой перерыв на кофе replace Второй перерыв на кофе: сору и substr Compare Find Резюме Список литературы Предметный указатель