
1120 страниц. Вильямс, 2014
Stanley B. Lippman, Josée Lajoie, Barbara E. Moo. C++ Primer. Addison-Wesley, 2013
Стенли Липпман и Барбара Му приложили руку к созданию первых версий компилятора C++ Cfront в 1980-х (как пишет Бьерн Страуструп в книге «Дизайн и эволюция C++», глава 3.3.4).
В книге четыре части: основы, библиотека, инструменты для разработчиков классов (копирование, перегрузка, ООП, шаблоны) и дополнительные темы (tuple, bitset, регулярные выражения, случайные числа, исключения, пространства имён, множественное и виртуальное наследование, перегрузка new и delete, RTTI и dynamic_cast, перечисления, указатели на члены класса, вложенные классы, объединения, локальные классы, снижающие переносимость возможности — битовые поля, volatile, extern "C"). Авторы сначала рассказывают о современном состоянии языка, например, об std::string, только затем — о массивах char. В общем, изложение довольно полное, вопросы только к структуре. Так, и довольно старые вещи типа extern, и вещи из новых стандартов наподобие decltype — появляются рано, когда читателю они ещё не слишком нужны. В целом часть, совместимая с C, описана слабо.
Книга включает стандарт C++11. Удивительно, как быстро всё может поменяться. Во второй главе приводятся разные способы инициализации, введённые этим стандартом.
int units_sold = 0;
int units_sold = {0};
int units_sold{0};
int units_sold(0);
Но уже в C++17 всё ещё немного поменялось.
Приложение — библиотека: имена и заголовки стандартной библиотеки, краткий обзор алгоритмов, случайные числа.
256 страниц. Вильямс, 2002
Stanley B. Lippman, Essential C++. Addison-Wesley, 2000
Хорошая серия, хорошая книга, но устаревшая. Возьмите поновее.
480 страниц. АСТ, 2024
Светлин Наков и колектив. Основи на програмирането (със C++), Фабер, 2019
Дополнение от 18 ноября 2024.
Полный список авторов: Андрей Царев, Божидар Колев, Борис Горанов, Венцислав Петров, Георгий Лацев, Георгий Шавов, Денис Миланов, Димитар Кацарский, Димо Димов, Димо Чанев, Зорница Йоханова, Игнес Симеонова, Йордан Добрев, Любомир Господинов, Мирела Дамьянова, Николай Костов, Пламен Динев, Светлин Наков, Цветан Иванов.
Они также выпустили книги по другим языкам (JavaScript, Java, Python, C♯), основам программирования (C♯) и криптографии.
Книга выпущена под лицензией CC-BY-SA, то есть её можно свободно распространять, переводить и так далее.
Содержание:
«Трюками и хаками» назвали оформление, именование, горячие клавиши, отладку.
В предисловии говорится, что книга учит структурному программированию, а язык не особо важен.
Оригинальная идея — задачи со спойлерами (иногда размыт весь фрагмент).
В книге много скриншотов Visual Studio. Задачи идут от простых к сложным, после всех основных глав — подготовка к проверочной работе. Подойдёт для полных новичков, но в книге на полтысячи страниц нет даже массивов, тем более не раскрываются хоть какие-то особенности языка.
432 страницы. Триумф, 2005
Brian Overland. C++ Without Fear, Pearson Education, 2005
Странная книжица. Автор долго работал в Microsoft и некой лаборатории. Описание многообещающее: «Вы научитесь думать „как программист“ и станете настоящим „асом“ программирования C++», но это, конечно, не так. Уже в предисловии автор честно говорит, что не будет битовых полей и операций с битами, GUI, шаблонов и STL. Исключения тоже будут освещены крайне скупо. То есть не будет даже C++98.
Трудно найти причину, по которой языки Visual Basic и FORTRAN вообще нашли место на страницах книги. И странно видеть в 2005 инструкции по работе со средой RHIDE (в оболочке DOS). Код в книге написан в плохом стиле (объявление без инициализации, скобки), проскакивает <iostream.h>.
Во всей книге примеры похожи на классические университетские задачи, а классы автор показывает на примере дроби, точки на плоскости, синтаксического анализатора (примитивного, на базе строковых функций) и строки.
Приложения: операторы, встроенные типы данных, краткий обзор синтаксиса, коды ASCII, основные библиотечные функции, глоссарий.
464 страницы. Бином, 2001
Ira Pohl. Object-Oriented Programming Using C++. Addison-Wesley, 1997
Обычная книга. Начинается она с главы «Зачем нужно объектно-ориентированное программирование на C++?» с кратким обзором языка и ООП, а первый фрагмент кода использует устаревшие <iostream.h> и <iomanip.h>. Книга учит устаревшим вещам (вроде старой спецификации исключений).
Имена всех файлов в формате 8.3, как в файловой системе FAT16 для DOS, например, printabl.cpp.
Автор проектирует классы массива (vect, фи), односвязного списка (slist, self-referring list), матрицы, полинома (на списках), рациональной дроби, времени (для демонстрации перегрузки), стека, бинарного дерева поиска.
Книга демонстрирует абсолютно плохой стиль (0 вместо NULL — лишь небольшой пример). Перевод тоже не блещет: например, «штампы проектирования» (шаблоны проектирования).
Приложения: коды символов ASCII, приоритет операторов, руководство по языку (50 страниц про всё на свете: sizeof, типы, new, ветвления, циклы и многое другое), ввод-вывод, STL и строковые библиотеки.
1244 страницы. Диалектика, 2018
Stephen Prata. C++ Primer Plus. Addison-Wesley, 2012
У книги необычная вёрстка в две колонки. В ней много иллюстраций и каких-то объяснений (например, про числа с плавающей запятой).
Наверное, подойдёт для новичков. Часть, совместимая с C, показана плохо. Но у автора есть отдельная книга по языку С.
Приложения: системы счисления, ключевые слова, таблица ASCII, приоритет операций, другеи операции, класс шаблона STRING, методы и функции библиотеки STL, рекомендуемая литература.
752 страницы. Диалектика, 2017
Siddhartha Rao. Teach Yourself C++ in One Hour a Day. Sams, 2017
Практически безупречный шедевр. Части, совместимой с C, не нашлось места на страницах книги, но в остальном всё очень хорошо, приводится много справок.
Придраться можно разве что к оформлению кода (#include<algorithm>, но не везде, фигурные скобки, поля структур с прописной, пробелы).
В отличие от многих других книг, автор сразу показывает, как правильно пользоваться стандартным пространством имён.
int main()
{
using namespace std;
...
Либо так.
int main()
{
using std::cout;
...
Хотя дальше пользуется типичным вариантом.
using namespace std;
int main()
{
...
Приложения: двоичные и шестнадцатеричные числа, ключевые слова, приоритет операторов, коды ASCII, ответы.
781 страница. Питер, 2004
Walter Savitch. Problem Solving with C++. Addison-Wesley, 2003
На первый взгляд, нормальная книга с советами и предупреждениями о ловушках, но ей не хватает глубины. Часть языка, совместимая с C, проходит мимо.
Изложение в основном последовательное, но есть исключения. Потоку управления программы (ветвлениям и циклам) посвящена 7 глава, и это странно, потому что до того уже были классы. Указатели и динамические массивы идут сразу после векторов. Это как минимум означает, что читатели не узнают про особенности аллокации и реаллокации элементов (и о том, что нельзя хранить указатели на элементы массива).
В дополнение к основным темам автор предлагает реализовать связный список и стек.
Немного устаревшая книга (<iostream.h> — первый звоночек). Тема библиотеки и современного (хотя бы на тот момент) языка практически не раскрыта. Для каких-то новичков может и подойти для начала, в конце концов, в книге есть интересные задачи.
784 страницы. Питер, 2005
Walter Savitch. Absolute C++, 2003
См. «Программирование на C++».
912 страниц. Диалектика, 2006
Nicholas A. Solter, Scott J. Kleper . Professional C++, 2005
Оглавление:
Приложения: готовимся к C++-интервью, аннотированная библиография.
У книги широкий охват тем. Чтобы браться за эту книгу, уже нужно знать C++ в каком-то объёме. Здесь есть всё, даже методологии разработки и шаблоны (паттерны) проектирования.
Авторы обещают какие-то реальные вещи, но всё равно многие примеры довольно несложные (простейшая электронная таблица и сетка для шахматной доски). Местами приводится справочная информация, например, о перегрузке операторов и библиотечных функциях.
Книга большая, серьёзная, но не без доли юмора.
«При создании объектно-ориентированной системы всегда стоит хорошо подумать, прежде чем превращать мельчайшую деталь в объект. Перефразируя Фрейда, можно сказать, что иногда переменная — это только переменная».
«Введя в поисковое средство Google фразу „hashtable in C++ STL“ („хеш-таблица в C++ STL“), вы получите несколько вариантов объяснения того, что в стандарт хеш-таблица не включена. [...] В сетевых конференциях могут использоваться довольно резкие, агрессивные выражения. Учтите это при поиске информации в вебе».
Нельзя обещать, что книга сразу сделает профессионалом, потому что при таком количестве тем объём в страницах слишком мал. Но книга точно подойдёт как чек-лист для тех, кто глубоко хотят разобраться в проектировании и разработке программ на C++.
Как и во многих написанных до 2011 года книгах есть устаревшие вещи: указатель auto_ptr и старая спецификация исключений. И сейчас нет нужды писать классы, чтобы передать поведение в STL-функции, вместо этого появились лямбда-функции.
272 страницы. Эксмо, 2018
V. Anton Spraul. Think Like a Programmer. An Introduction to Creative Problem Solving. No Starch Press, 2012
Издатели так и не разобрались, какая же фамилия у автора — Spraul или Spraun.
В самом начале стоит метка «Программирование для детей».
Содержание:
Первая глава — сборник логических задачек с «моралью».
«Крестьянин с лисицей, гусем и мешком кукурузы должен пересечь реку. У крестьянина есть лодка, однако в ней есть место только для самого крестьянина и одного из перечисленных объектов. К сожалению, и лисица, и гусь голодны. Лисица не может быть оставлена наедине с гусем, так как она съест гуся. Точно так же гусь не может остаться наедине с мешком кукурузы, иначе он склюет кукурузу. Как крестьянину перевезти животных и кукурузу через реку?»
Во второй главе говорится, что базовый «C++» уже надо знать. И далее всю книгу будут какие-то не очень сложные задачки, например, вывести символы по шаблону.
#####
####
###
##
#
Другие задачки тоже довольно простые.
Книге не хватает целостности. Будто бы хотелось охватить побольше тем (вплоть до устройства связных списков), но на качественное объяснение сил не хватило. Первая и последняя главы вовсе не вяжутся с остальными, они «философские» по наполнению, но там обещают очень интересные вещи, которые не получают продолжения (судоку, задачи про замки́, другие головоломки).
651 страница. Питер, 2012
Paulo Franca. C++: No Experience Required. Sybex, 1997
Странный нулевой урок про каталоги и компиляторы. Настораживает обилие скриншотов разных окон. Всё очень сильно устарело (старый друг <iostream.h>).
На обложке русского издания 2012 года странный код. И это очень показательно. Это код из раздела «Первый этап великого похода», где проектируют робота в лабиринте.
#include "franca.h"
//с1robot1.срр
Robot Tracer;
void mainprog()
{
Tracer.face(3);
Tracer.step();
}
На протяжении всей книги используется заголовочный файл "franca.h".
«На самом деле основная последовательность действий в C++ обозначается функцией main() или winmain(). Имя mainprog() используется только в программном обеспечении книги. В следующих уроках об этих различиях будет рассказано более подробно».
За функцией mainprog() скрывается winmain(), о чём автор честно предупреждает.
Настораживает многое. Название экземпляра Tracer с прописной буквы, сам факт, что он глобальный статический, нулевые вертикальные отступы, магическое число 3 для кодирования направления (север, запад, юг, восток) вместо элемента перечисления (например, Direction::East).
Вся книга сводится не к тому, что такое C++, а к тому, как пользоваться библиотекой автора. Сначала это создание экземпляра класса и последовательный вызов его методов. Проектирование функций начинается с передачи в них именно объектов (по ссылке и по значению). И только потом наступает черёд числовых переменных и простейших операторов (типа =).
Но долго это не длится. Когда автор возвращается к функциям, просто предлагается пользоваться готовыми функциями для рисования линий. И где-то после этого найдётся место циклам, ещё позднее — ветвлениям. В середине книги.
Дальше автор рассказывает о классах, наследовании (поверхностно), массивах, структурах, строках (и типе char как таковом), вводе и выводе с помощью std::cin и std::cout (вместо функций из библиотеки автора), файлах и препроцессоре.
Вот странное упражнение из книги: предлагается определить значения переменной k после выполнения каждого присваивания. В первом и последнем случаях неопределённое поведение (undefined behavior), то есть результат непредсказуем. В предпоследнем случае вообще должна происходить ошибка компиляции.
int i=1, j=2, k=3;
k=++k+j;
k=i+j++;
k=i-j;
i+j=k;
k++=j;
Урок «Дополнительные возможности» объясняет, что такое указатель, перегрузка операторов, шаблоны, дружественные функции и классы, множественное наследование, выделение памяти и логические операторы (&&, || и !). Всё экстремально коротко.
Очень слабая книга и устаревшая. Стоит похвалить идею показывать всё наглядно (например, когда автор объясняет сортировку, в окне отображаются человечки), но реализация подкачала.