880 страниц. Лори, 2003
Victor Shtern. Core C++. A Software Engineering Approach. Prentice Hall, 2000
Название «Core C++» правильнее было бы перевести не как «Основы C++», а как «ядро языка», то есть язык без стандартной библиотеки: отдельной такой главы действительно нет.
Книга с претензией. Первая тема первой главы «Объектно-ориентированный подход» — «Истоки кризиса программного обеспечения». То есть читателя ждут эссе о методах управления разработкой.
Дальше идёт типичное описание C++98, но с парой оговорок. Автор демонстрирует связный список. Но проблема в том, что функции появляются лишь в следующей главе. То есть вся работа со «связным списком» была прямо в функции main().
Когда рассказ поворачивается в сторону ООП, непременно следует описание таких важных вещей, как сильное сцепление (high cohesion), низкая связность (low coupling), инкапсуляция, наследование и агрегирование. Не остаётся в стороне и UML.
К сожалению, код оформлен очень плохо. Откровенно плохо. Перечисли мы здесь всё — получилась бы целая статья.
#include "c:\data\cppbook\ch02\time.h"
В самом конце книги — небольшое эссе о «конкурентах» C++. Среди них называется Visual Basic и, само собой, Java (C♯ появится на два года позже книги).
572 страницы. Питер, 2004
Bruce Eckel. Thinking in C++. Volume 1: Introduction to Standard C++. Prentice Hall, 2000
Нормальное изложение C++98, но, к сожалению, без стандартной библиотеки и C-совместимой части (например, в плане ввода-вывода). В самом начале идут разговоры про ООП и UML, немного неуместные именно там, но их можно пропустить.
Приложения: стиль программирования, рекомендации по программированию.
608 страниц. Питер, 2004
Bruce Eckel, Chuck Allison. Thinking in C++. Volume 2: Practical Programming. Prentice Hall, 2003
Совершенно великолепная книга.
Различные механизмы безопасности (исключения, assert(), тестирование, отладка и трассировка), стандартная библиотека (строки, потоки ввода-вывода), шаблоны, обобщённые алгоритмы и контейнеры, RTTI, некоторые шаблоны проектирования и многопоточное программирование (по последней теме есть отдельные хорошие книги).
320 страниц. Питер, 1999
Jeff Alger. C++ for Real Programmers. Academic Press, 1998
Не для новичков (о чём прямо сказано). Не совсем понятно, для кого её писали. Книгу открывают эссе «Дао C++» и три «великие идеи»:
косвенные обращения,
гомоморфные иерархии классов,
пространства памяти.
Если проще: указатели, наследование от базового абстрактного класса без новых открытых членов и разные аспекты управления памятью.
Автор сразу предупреждает, что его не интересует оформление кода, ведь плохой код не станет хорошим просто из-за оформления. Конечно, но это не повод писать код как попало.
На первых же страницах, где говорится о переменных и константах, появляются ссылки, такие сочетания слов, как конструктор, нетривиальный класс, константный указатель на константу.
Первое, что рассматривает автор — ключевое слово const, он выносит его в заголовок и всесторонне рассматривает: константные переменные, const и #define, константы в перечислениях, указатель на константу, константный указатель, константный указатель на константу, константные аргументы функций, неконстантные аргументы функций, константные функции классов.
Отсюда следует вывод, что это скорее справочник, а не учебник.
Автор упоминает интересную аббревиатуру в контексте компиляторов: DWIMNIS, то есть Do what I mean, not what I say («Делай то, что я подразумеваю, а не то, что я говорю»).
Какие-то заявления слишком неточные, например, что «шаблоны — это усовершенствованные макросы». В книге излагается устаревшая спецификация исключений (что естественно) и очень много «велосипедов» на тему умных указателей и сборщика мусора. Небольшое замечание: сомнительный перевод названия статических переменных специального типа, которые следят, чтобы никто не разыменовал NULL: screamer — «стукач».
На страницах книги слишком много автора с его неповторимыми пассажами.
«Если вам когда-нибудь захочется сделать нечто похожее, встаньте с кресла, медленно прогуляйтесь вокруг дома, сделайте глубокий вдох, сядьте за компьютер и придумайте что-нибудь другое».
«Представьте себе удивление вашей программы, когда ей сообщат, что объект имеет размер 20 байт, хотя на самом деле он равен 220 байтам! Разработчики компиляторов C++ любят похвастаться подобными проделками за кружкой пива после работы».
«Во время долгих ночных отладок мне часто хотелось создать оператор с именем #$%^&, но C++ на этот счёт неумолим».
«Интересно, почему у нас так много предложенных стандартов и ни одного реального? Скорее всего, дело в том, что наша экономика не может вместить всех безработных членов комитетов стандартизации».
Приложение: Java против C++.
480 страниц. Питер, 2015
Alex Allain. Jumping into C++. Cprogramming.com, 2012
В самом начале автор показывает, как установить Code::Blocks, XCode и g++ (для разных операционных систем). Со скриншотами. Где-то в середине книги есть ещё пара глав со скриншотами, в том числе глава про отладку.
Код местами оформлен очень плохо и совершенно непоследовательно. Местами встречаются неточности, например, «оператор» #include (это директива препроцессора).
В конце каждой главы — тест и практические задания.
Автор знакомит с STL и совершенно игнорирует часть языка, совместимую с C. В качестве бонуса — пишет связный список и двоичное дерево. В целом изложение слишком поверхностное, но вполне подошло бы для студентов колледжа.