Dyzzet|
C++ Data Science Алгоритмы Темы · Блог · YouTube
Обзоры книг по C++
Учебная литература. Часть II

Стенли Б. Липпман, Жози Лажойе, Барбара Э. Му. Язык программирования C++. Базовый курс

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 всё ещё немного поменялось.

Приложение — библиотека: имена и заголовки стандартной библиотеки, краткий обзор алгоритмов, случайные числа.

Стенли Б. Липпман. Основы программирования на C++

256 страниц. Вильямс, 2002

Stanley B. Lippman, Essential C++. Addison-Wesley, 2000

Хорошая серия, хорошая книга, но устаревшая. Возьмите поновее.

Брайан Оверленд. C++ без страха

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, основные библиотечные функции, глоссарий.

Айра Пол. Объектно-ориентированное программирование на C++

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 и строковые библиотеки.

Стивен Прата. Язык программирования C++. Лекции и упражнения

1244 страницы. Диалектика, 2018

Stephen Prata. C++ Primer Plus. Addison-Wesley, 2012

У книги необычная вёрстка в две колонки. В ней много иллюстраций и каких-то объяснений (например, про числа с плавающей запятой).

Наверное, подойдёт для новичков. Часть, совместимая с C, показана плохо. Но у автора есть отдельная книга по языку С.

Приложения: системы счисления, ключевые слова, таблица ASCII, приоритет операций, другеи операции, класс шаблона STRING, методы и функции библиотеки STL, рекомендуемая литература.

Сиддхартха Рао. Освой самостоятельно C++ по одному часу в день

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, ответы.

Уолтер Савич. Программирование на C++

781 страница. Питер, 2004

Walter Savitch. Problem Solving with C++. Addison-Wesley, 2003

На первый взгляд, нормальная книга с советами и предупреждениями о ловушках, но ей не хватает глубины. Часть языка, совместимая с C, проходит мимо.

Изложение в основном последовательное, но есть исключения. Потоку управления программы (ветвлениям и циклам) посвящена 7 глава, и это странно, потому что до того уже были классы. Указатели и динамические массивы идут сразу после векторов. Это как минимум означает, что читатели не узнают про особенности аллокации и реаллокации элементов (и о том, что нельзя хранить указатели на элементы массива).

В дополнение к основным темам автор предлагает реализовать связный список и стек.

Немного устаревшая книга (<iostream.h> — первый звоночек). Тема библиотеки и современного (хотя бы на тот момент) языка практически не раскрыта. Для каких-то новичков может и подойти для начала, в конце концов, в книге есть интересные задачи.

Уолтер Савич. C++ во всей полноте

784 страницы. Питер, 2005

Walter Savitch. Absolute C++, 2003

См. «Программирование на C++».

Паоло Франка. 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;

Урок «Дополнительные возможности» объясняет, что такое указатель, перегрузка операторов, шаблоны, дружественные функции и классы, множественное наследование, выделение памяти и логические операторы (&&, || и !). Всё экстремально коротко.

Очень слабая книга и устаревшая. Стоит похвалить идею показывать всё наглядно (например, когда автор объясняет сортировку, в окне отображаются человечки), но реализация подкачала.

7 февраля 2021
Зарегистрируйтесь и войдите, чтобы оставлять комментарии и голосовать.

Книги по C++
Книги Бьерна Страуструпа
Учебная литература. Часть I / Часть II / Часть III. Книги Герберта Шилдта / Часть IV
Русскоязычная литература. Часть I / Часть II / Часть III / Часть IV
Стандартная библиотека шаблонов
Структуры данных, алгоритмы, решение задач
Что выбрать? (Обновляется)
Также может быть интересным
© MMXI—MMXXIII. RSS. Поддержать сайт
Светлая тема / тёмная тема