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

Владимир Григорьевич Давыдов. Программирование и основы алгоритмизации

447 страниц. Высшая школа, 2003

Эта книга не обещает научить языку C++, к тому же автор упорно пишет Си/C++. В основном будет часть, совместимая с C (в том числе константы не const, а #define). Форматирование будет не идеальное, где-то — транслит (kaf_name — «название кафедры»).

Сперва идут системы счисления, история языков программирования, блок-схемы. Автор немного знакомит с грамматиками и тем, как их представляют.

dynamic_cast — преобразование типа с проверкой во время выполнения

Вот это было далеко не исчерпывающее определение.

Глава «Редко используемые средства языков Си/C++» рассказывает про typedef, enum и union. И если объединения (union) действительно мало кому могут быть полезны, typedef и перечисления (enum) — практически повседневность.

Глава «Модели памяти» — про седую 16-битную древность и указатели near, far и huge (шёл 2003 год). После линейного списка на C — введение в C++ без ООП. А затем — «Технология создания программ», что бы это ни значило.

Во второй части вас ждут деревья (текстовое описание), сортировка (с мусорным кодом), графы (код на C) и хеш-таблицы.

Приложения: тесты и проекты, создание программного проекта (в Visual Studio или Borland C++ 3.1), рекомендации по структуре однофайловой программы с одной функцией и пример оформления исходного кода, методика отладки, рекомендации по созданию многофайлового программного проекта с несколькими функциями, примерная программа дисциплины, содержимое компакт-диска.

Владимир Григорьевич Давыдов. Технологии программирования. C++

672 страниц. БХВ-Петербург, 2005

Из огня да в полымя: ООП с первых страниц. Классы, дружба, перегрузка операторов, шаблоны.

Форматирование, мягко говоря, спорное. И назвать класс линейного списка LINSP? Ну c’mon.

Классическая ловушка: new без специального на то указания не возвращает NULL, а выбрасывает исключение. Расскажите автору.

CMP1(void)
{
    // Размещение в динамической памяти
    if( !( pc = new C ) )
    {
        cout << " The dynamic memory - allocation "
            "complex given does not suffice is not "
            "fulfilled " << endl;
        exit( 1 );
    }
...

В деструкторе обнулять поля нет никакого смысла.

~CMP1( void )
{
    if( pc )
    {
        delete pc; pc = NULL;
    }
}

Кажется, автор немного заблуждается по поводу динамического приведения типа.

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

Аргумент dynamic_cast должен быть указателем или ссылкой на объект полиморфного типа, здесь не может быть «если».

Применяя эту операцию, убедитесь, что её аргумент является полиморфным объектом [...]

Если придираться, то «объект» здесь говорить неверно. Речь может идти либо об указателе, либо о ссылке.

Автор показывает сортировки (название класса SArT_B: сортировка — Sort, массив — Array, шаблон — Template, базовый класс — Base), графы, хеш-таблицы, списки, очереди, стеки, снова сортировки, стандартную библиотеку и обобщённое программирование (шаблоны).

Приложения: ответы и решения, тексты и программные проекты, создание и отладка проекта консольного приложения в Visual Studio, компакт-диск.

Динман Максим Исакович. C++. Освой на примерах

384 страницы. БХВ-Петербург, 2006

Рассказ начинается с того, как запускать Borland C++, затем много C и немного про классы. Две особые главы — про графы и основы шифрования.

Название C++ — изобретение совсем недавнее (лето 1983 года).

Если 1983 был недавно, то понятно, что здесь делают <iostream.h>, getch() и <conio.h>.

С базовыми типами в C и C++ всегда было сложно. В учебниках либо пишут типичные размеры в байтах, либо выбирают вариант, соответствующий конкретной архитектуре (с оговоркой, что этот вариант не единственный). Что же сделал автор? Указал конкретные размеры типов, кроме int и unsigned int: «Зависит от реализации». Практически все они зависят!

Возможно, просто опечатка, но c-- превратилось в c-. И что за учебник без транслита (kol_vo_1, kol_zero, kol_one)?

Причудливое форматирование if/else (можно обойтись switch/case).

if (z=='-') cout<<(a-b); else
  if (z=='+') cout<<(a+b); else
    if (z=='*') cout<<(a*b); else cout<<(a/b);

Список написан в стиле C. Следом — работа с файлами, уже в новом стиле. Особенно хорошо такую смесь видно в главе «Поиск и замена в файле» (а ещё заметим волшебные числа, неинициализированные переменные, однобуквенные названия с большой буквы):

char ch[100], replace[100], buffer;
int i, K, T, pos;
...
K=strlen(ch);
T=strlen(replace);
while (!input.eof())
{
  pos=input.tellg();
...

Память нужно освобождать, но правильно (new — delete, new[] — delete[]):

delete N;       // Удаляет динамический объект типа int,
                // если было N=new int
delete array;   // Удаляет динамический массив длиной 50,
                // если было int *mas = new int[50]

Хотя какая разница, если ты забыл освободить её.

int *N=new int[10];
if (N)
{
  ...
}

Основы ООП совсем поверхностные.

Про графы — без комментариев.

int Graf[100][100], i, j, N;

Глава об основах шифрования даёт немного информации о простейших шифрах и RSA (без кода).

На таких примерах C++ не освоишь.

Всеволод Борисович Иванов. Прикладное программирование на C/C++ с нуля до мультимедийных и сетевых приложений

240 страниц. СОЛОН-ПРЕСС, 2008

Амбициозная задача — научить и C, и C++ с нуля до таких высот всего лишь за 240 страниц.

Первая глава — о Turbo C++. С обоснованием, почему выбран язык C.

Среди многих языков программирования нами выбран язык C. Почему? К моменту написания книги в России язык C по объёму использования, вероятно, уступает языку ПАСКАЛЬ, возможно, уступает языку БЭЙСИК. Тем не менее, выбор C не случаен и является нашей рекомендацией, хотя на особо принципиальном значении такого выбора настаивать большого смысла нет.

Первая программа.

#include<stdio.h>
#include<conio.h>
          void main()
          {
              clrscr();
              printf("Hello World!");
              getch();
          }

В принципе, здесь книгу уже можно закрывать.

Просто не понятно, откуда автор брал факты: «short — короткие целые, которые занимают 1 байт». Открыть файл, не проверить корректность, не закрыть? Почему бы нет. Нам обещали мультимедийные приложения? Пожалуйста: графический режим TURBO C в консоли.

В этой части обзоров мы исключили книги по конкретным технологиям, но фактически она оказалась про Borland C++. Основам работы с классами учат на примере формошлёпства в этой среде.

И сразу — к сетям. Точнее, к соответствующим компонентам Borland C++. Программы для записи и воспроизведения звука, а потом и видео — тоже будут на подобных компонентах (видео — с примесью WinAPI и DirectX).

Про C++ и даже C мы так и не узнали ничего.

Элеонора Алексеевна Ишкова. C++. Начала программирования

368 страниц. Бином-Пресс, 2004

Ещё один оборотень про Borland C.

C, ещё C, немного «ООП» и «других тем» (которые нельзя ставить в один ряд: побитовые операторы, суффиксы констант, переменное число аргументов, рекурсия, строки и числа, перегрузка скобок, шаблоны классов, контейнеры — самописные, не из стандартной библиотеки). Очень много устаревшего (kbhit()), форматирование на грани фола, темы подобраны случайно.

 // файл c:\cpp\\part1\1_01.cpp
 // Рис.1.1а. Консольный ввод/вывод, комментарии
 
#include <iostream.h>    //заголовочный файл
#define N 12             //замена N на 12
 
main(){
cout<<"*****начало*****";
int i,j,k,l; //объявление
i=j=2;       //присваивание
double d=.781; //объявление с инициализацией
char f='&';    //объявление с инициализацией
cout<<"\n"<<i;//вывод на монитор i
cout<<"\n"<<"j="<<j
    <<''<<"d="<<d
    <<"\n"<<"f="<<f; /последовательный вывод на монитор j, d, f*
l=N;  // использование директивы #define
cout<<"\n"<<"l="l;
/* выводить содержание замены N непосредственно нельзя,
т.к. операция вывода не реагирует на директиву #define */

cout<<"\n"<<"введите целое число k ";
cin>>k;         //ввод k с клавиатуры
cout<<"
k="<<k;  //вывод k
char fc;cout<<"\nвведите символ fc ";
cin>>fc;cout<<"
fc="<<fc; // ввод и вывод симв. переменной fc
cout<<"\nl*j="<<l*j<<" d+k="<<(d+k); /*арифм. действия при выводе*/
cout<<"\nвывод символа \'";
cout<<"\nвывод символа \\ вывод символа \"";
cout<<"\n^^конец^^";
return 0; /*программа при завершении явно возвращает
вызывающему процессору значение 0 /*
 } //конец функции main

Так выглядит первая программа. Так же выглядят и все последующие.

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

Игорь Юрьевич Каширин, Валентин Семёнович Новичков. От C к C++

334 страницы. Горячая линия — Телеком, 2005

Уже много раз мы смотрели на программу «Hello, world!», и каждый раз она была показательной.

/*Простейшая программа*/
#include <stdio.h>
#define STARS printf("****************************\n");
main()
{
    int a,b,sum;
    STARS;
    printf("Введите два числа :");
    scanf("%d%d",&a,&b);
    sum=a+b;
    printf("Сумма =%d\n",sum);
    STARS;
}

В этот раз почти так и вышло. Не хватает разве что транслита и <conio.h>, которые дальше встретятся.

На вид — обычная методичка (первая глава начинается с «этапов решения задач на ЭВМ» и блок-схем, вплоть до пропорций блоков). Причём методичка по C. Про C++ совсем чуть-чуть. Зато есть про структурограммы.

Приложения: некоторые библиотечные функции, библиотечные функции графики, «упражнения по C++ (объекты)».

Дмитрий Анатольевич Клюшин. Полный курс C++. Профессиональная работа

672 страницы. Вильямс, 2004

Убрать устаревшие вещи — и получится хороший учебник по C++03. Удивительно, что приходится об этом говорить, но volatile или POD (Plain Old Data) должны быть в любом нормальном учебнике по C++. Бонусом идут ассемблерные вставки.

Подход строгий. Ядро языка — по парадигмам: структурное программирование, ООП, обобщённое программирование (правда, исключения почему-то попали именно сюда). Библиотека языка: итераторы, функторы, контейнеры, алгоритмы, потоки, буферы потоков, файлы.

Приложение: директивы препроцессора.

Елена Кондратюк. C++. Трюки и эффекты

400 страниц. Питер, 2006

Формошлёпство в C++ Builder.

Надо сказать, «трюки» в C++ действительно есть. Отдельные паттерны проектирования, к примеру, можно очень хитрым образом написать с помощью шаблонов («шаблонной магии», как ещё говорят). О приёмах оптимизации тоже написаны целые тома. Автор явно не такие «трюки» имела в виду. А что за «эффекты» — ни малейшего понятия.

Приложения (стыдно писать): пункты главного меню C++ Builder, C++ Builder и Delphi, коды клавиш, цветовые константы, исключения, сообщения, методы класса TRegistry.

Елена Александровна Конова, Галина Андреевна Поллак. Алгоритмы и программы. Язык C++

384 страницы. Лань, 2017

Методичка с плохо нарисованными картинками. От языка C++ одно название (от C++ только new, что ли).

Александр Борисович Крупник. Изучаем C++

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

Код часто написан «стеночкой».

Книга почти детская. «Том Сойер рисует на заборе» — название первой части и метафора для памяти (единицы и нули — доски покрашенные и ещё нет). Тем не менее, «разжёвано» мало. Получился сборник тем (введение, операторы, строки, контейнеры, функции, указатели, ссылки, немного про объекты и операторы, наследование, шаблоны), которые не складываются в одну картинку. Это поднимает интересный вопрос: на рынке нужны хорошо написанные книги, ориентированные на детей. Хорошо написанные.

Приложение: приоритеты операторов.

Александр Борисович Крупник. Самоучитель C++

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

Код плохо написан, часто — снова «стеночкой».

В предисловиях автор пытается убедить читателей, что C++ совсем не то же самое, что и C, что учить C++ нужно по-новому. Но потом не пользуется константами, как в C++ и положено, а берёт старый добрый сишный инструмент — директиву препроцессора.

#define NOFP 4
#define NOFC 9

Ничего интересного нет.

Как и в предыдущей книге, автор будет учить пользоваться программой FAR.

Приложения: приоритеты операторов, устройство целочисленных переменных, стандартная библиотека.

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

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