Название: Новые сложные задачи на C++ Автор: Саттер Г. Издательство: Вильямс Год: 2008 Страниц: 272 ISBN: 978-5-8459-0823-0 Формат: PDF Размер: 10 Мб Язык: русский Серия: C++ In-Depth
Данная книга представляет собой продолжение вышедшей ранее книги "Решение сложных задач на C++". Многие из рассмотренных в книге задач появились в результате работы автора и других программистов над своими программами. Цель книги — помочь читателю сделать верные выводы, как из хорошо известного ему материала, так и из только что изученного, и показать взаимосвязь между различными частями C++. Данная книга не посвящена какому-то конкретному аспекту C++. Нельзя, однако, сказать, что она охватывает все детали C++ — для этого потребовалось бы слишком много книг, — но, тем не менее, в ней рассматривается широкая палитра возможностей C++ и стандартной библиотеки и, что немаловажно, демонстрируется, как кажущиеся на первый взгляд несвязанными между собой вещи могут совместно использоваться для получения новых решений старых и хорошо известных задач. Здесь вы найдете материал, посвященный шаблонам и пространствам имен, исключениям и наследованию, проектированию надежных классов и шаблонам проектирования, обобщенному программированию и магии макросов, — и не просто винегрет из этих вопросов, а задачи и решения, выявляющие взаимосвязь всех этих частей современного C++.
Предисловие 14 Стиль или суть? 14 Метод Сократа 15 Как читать данную книгу 16 Благодарности 17 Обобщенное программирование и стандартная библиотека C++ 19 Задача 1. Вектор: потребление и злоупотребление 20 Задача 2. Строчный двор. Часть 1: sprintf 26 Задача 3. Строчный двор. Часть 2: стандартные альтернативы 30 Задача 4. Функции-члены стандартной библиотеки 39 Задача 5. Красота обобщенности. Часть 1: Азы 42 Задача 6. Красота обобщенности. Часть 2: Достаточно ли универсальности? 45 Задача 7. Почему не специализируются шаблоны функций? 50 Задача 8. Дружественные шаблоны 56 Задача 9. Ограничения экспорта. Часть 1: основы 64 Задача 10. Ограничения экспорта. Часть 2: взаимосвязи, практичность и советы по использованию 71 Вопросы и приемы безопасности исключений 79 Задача 11. Попробуй поймай 80 Задача 12. Безопасность исключений: стоит ли овчинка выделки? 84 Задача 13. Прагматичный взгляд на спецификации исключений 87 Разработка классов, наследование и полиморфизм 95 Задача 14. К порядку! 96 Задача 15. Потребление и злоупотребление правами доступа 99 Задача 16. Крепко закрыт? 103 Задача 17. Инкапсуляция 110 Задача 18. Виртуальность 118 Задача 19. Не можешь — научим, не хочешь — заставим! 126 Задача 20. Контейнеры в памяти. Часть 1: уровни управления памятью 138 Задача 21. Контейнеры в памяти. Часть 2: какие они на самом деле? 142 Задача 22. Новый взгляд на new. Часть 1: многоликий оператор new 149 Задача 23. Новый взгляд на new. Часть 2: прагматизм в управлении памятью 156 Оптимизация и эффективность 163 Задача 25. inline 168 Задача 26. Форматы данных и эффективность. Часть 1: игры в сжатие. 175 Задача 27. Форматы данных и эффективность. Часть 2: игры с битами 179 Ловушки, ошибки и головоломки 185 Задача 28. Ключевые слова, не являющиеся таковыми 186 Задача 29. Инициализация ли это? 192 Задача 30. Двойная точность — вежливость программистов 197 Задача 31. Сумеречное состояние... кода 200 Задача 32. Небольшие очепятки и прочие курьезы 204 Задача 33. Ооооператоры 207 Изучение конкретных примеров 211 Задача 34. Индексные таблицы 212 Задача 35. Обобщенные обратные вызовы 221 Задача 36. Объединения 228 Задача 37. Ослабленная монолитность. Часть 1: взгляд на std::string 242 Задача 38. Ослабленная монолитность. Часть 2: разбор std::string 247 Задача 39. Ослабленная монолитность. Часть 3: уменьшение std::string 254 Задача 40. Ослабленная монолитность. Часть 4: новый std::string 257 Список литературы 265 Предметный указатель 268