Сообщений 2    Оценка 451 [+1/-0]         Оценить  
Система Orphus

Решение сложных задач на С++

Серия C++ In-Depth

Автор: Герб Саттер
Издательство: "Вильямс", 2002
400 страниц

Материал предоставил: Валерий Лаптев
Найти в магазинах

Аннотация

Содержание
Комментарии

Аннотация

В данном издании объединены две широко известные профессионалам в области программирования на C++ книги Герба Саттера Exceptional C++ и More Exceptional C++, входящие в серию книг C++ In-Depth, редактором которой является Бьерн Страуструп, создатель языка C++. Материал этой книги составляют переработанные задачи серии Guru of the Week, рассчитанные на читателя с достаточно глубоким знанием C++. Однако книга будет полезна каждому, кто хочет углубить свои знания в этой области.

Содержание

1. Обобщенное программирование и стандартная библиотека C++

2. Вопросы и технологии безопасности исключений

3. Разработка классов, наследование и полиморфизм

4. Брандмауэр и идиома скрытой реализации

5. Пространства и поиск имен

6. Управление памятью и ресурсами

7. Оптимизация и производительность

8. Свободные функции и макросы

9. Ловушки, ошибки и антиидиомы

10. Понемногу обо всем

Послесловие

Список литературы

Предметный указатель

Комментарии

Лаптев Валерий

Третий том серии С++ In-Depth на самом деле появился первым. Когда он появился, я как раз занимался написанием пособия по функциям С++ для своих студентов. Естественно, основывался я на конкретных системах, которые мы и изучали: Borland C++ Builder и Visual C++. И как раз некоторые вопросы, которые я себе и студентам задавал, оказались почти идентичными вопросам из книги Саттера. Почитав ее я понял, что стандарт нужно изучать всерьез. И студентам излагать язык, постоянно ссылаясь на стандарт, а не на особенности той или иной системы. Саттер ставит такие вопросы, которые при отсутствии постоянной программистской практики просто в голову не приходят. Или наоборот, почитав Саттера, понимаешь, что не компилер виноват, а ты сам, поскольку стандарта не знаешь.

В книге изложены 87 нетривиальных вопросов-задач и по каждой приводится объяснение-решение. В чем-то книга похожа на книги Мейерса, однако и существенно от них отличается. Если у Мейерса даются конкретные советы, то Саттер сначала ставит вопрос, а потом приводит решение и часто не единственное. Уровень вопросов - выше среднего. Если книги Мейерса (ИМНО) предназначены как раз для крепких программистов-профессионалов, которые уже сделали один-два-три проекта и ощущают необходимость в некоторой систематизации своих знаний, которые задают вопрос "А что дальше?", то книга Саттера уже "для гурманов" языка С++.

По оглавлению, которое представлено на сайте books.ru, очень трудно судить о реальном содержании книги. В первой главе Саттер ставит 17 вопросов-задач, так или иначе связанных со стандартной библиотекой. Например, есть два задания по разработке класса строк, нечувствительных к регистру. Причем начинает объяснения с самого "первого" вопроса: а что это значит - нечувствительный к регистру? И так по всем задачам - объяснения очень подробные. Есть задачи о функциях-предикатах, об итераторах, о контейнерах. Сравнивает Саттер очередь и вектор, множество и map, объясняет, почему vector<bool> не является стандартным контейнером. Есть и про временные объекты и про typename. Но особенно мне понравилась самая последняя задача: Саттер реализует игру "Быки и коровы" полностью средствами стандартной библиотеки, не используя оператор цикла. Главная функция у него состоит из двух вызовов функций: srand для генерации начальной комбинации, и find_if для собственно игры. А в одной из внутренних функций он в качестве шутки реализовал весь алгоритм в операторе возврата!

Вторая глава полностью посвящена использованию исключений. Первые 10 вопросов так и называются: Разработка безопасного кода. Часть 1-10. Есть и об исключениях в конструкторах и о разработке безопасных классов, и о неперехваченных исключениях. Например, в задаче 2.15 описывается проблема деструкторов, генерирующих исключение. В этой же главе - об auto_ptr. И безопасная реализация присваивания - тоже здесь. В третьей главе рассматриваются традиционные ООП-устои: наследование и полиморфизм. Подробно разбирается множественное наследование. В частности, именно здесь описывается проблема вызова чисто виртуальной функции в деструкторе (задача 3.10) - я видел вопрос на эту тему в форуме. Эта глава по содержанию наиболее близка Мейерсу, но угол зрения совсем другой.

Остальные главы значительно меньше по объему, хотя не менее важны. В четвертой главе разбираются возможности уменьшения зависимостей времени компиляции. Пятая - полностью (4 задачи, 20 страниц) о принципе поиска имен Кенига, и где этот принцип нарушается. Шестая - об указателях, в том числе и об auto_ptr (снова), и об интеллектуальных тоже. Название 8 главы как раз говорит само за себя - здесь об inline и отложенной оптимизации (интересная постановка вопроса. да?!).

Восьмая, девятая и десятая - это разные вопросы-задачи-пояснения о С++. Но одну задачу я приведу. Вопрос 8.1 Саттера: "Можете ли Вы написать функцию, возвращающую указатель на саму себя? Если да, то для чего это может понадобиться? "Вопрос сродни знаменитой задаче из сборника Уэзерелла "Этюды для программистов": написать программу, печатающую свой собственный текст. Без использования файлов. Кто пробовал - знает.

Именно такой вопрос меня и занимал, когда мне попалась книга Саттера. Подумайте и вы, и купите книгу Саттера. Ибо, как сказал Элджер, "язык С++ изучается постепенно", а книга Саттера из тех, которые этому очень способствует. Особенно в совокупности с другими книжками этой же серии.

    Сообщений 2    Оценка 451 [+1/-0]         Оценить