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. В качестве бонуса — пишет связный список и двоичное дерево. В целом изложение слишком поверхностное, но вполне подошло бы для студентов колледжа.
272 страницы. Наука и техника, 2022
Добавлено 27 июля 2023
Автор также написал книги «Хакинг на примерах. Уязвимости, взлом, защита», «Хакинг на Android», «Хакинг веб-сервера».
Содержание:
Примерно в начале книги (что-то из синтаксиса языка Perl):
until (слева река)
{
двигайтесь прямо;
}
Хочется показать класс стека.
#include <iostream>
using namespace std;
const int SIZE = 26;
class stack {
char stck[SIZE];
int tos;
public:
void init();
void push(char ch);
char pop();
};
void stack::init()
{
tos = 0;
}
void stack::push(char ch)
{
if (tos==SIZE) {
cout << "Стек полон!" << endl;
return;
}
stck[tos] = ch;
tos++;
}
char stack::pop() {
if (tos==0) {
cout << "Стек пуст!" << endl;
return 0;
}
tos--;
return stck[tos];
}
Это трудно даже комментировать.
И уже после класса стека, где используется массив, — идёт глава о массивах. В третьей главе — клиент-серверное приложение. Код — смесь C и C++. Затем написано об этапах развития TCP/IP, хотя конкретики дальше не будет.
Потом снова к программированию: двоичный поиск в массиве. Полностью внутри функции main. Автор по-сишному пишет main(void) и зачем-то объявляет константы истина и ложь. Именно таким образом.
#define TRUE 0
#define FALSE 1
while(bsearch == FALSE && left <= right) {
middle = (left + right) / 2;
if(number == аrray[middle]) {
bsearch = TRUE;
cout << "** Найдено **\n";
} else {
if(number < аrray[middle]) right = middle - 1;
if(number > аrray[middle]) left = middle + 1;
}
}
if(bsearch == FALSE)
cout << "-- Не найдено --\n";
«Дополнительную информацию по этому методу поиска и дополнительный пример кода вы можете получить в Википедии».
Пузырьковая сортировка. Уже в виде функции.
void bubble_sort(int a[], int size) {
int switched = 1;
int hold = 0;
int i = 0;
int j = 0;
size -= 1;
for(i = 0; i < size && switched; i++) {
switched = 0;
for(j = 0; j < size - 1; j++)
if(a[j] > a[j+1]) {
switched = 1;
hold = a[j];
a[j] = a[j + 1];
a[j + 1] = hold;
}
}
}
Итераторы begin() и end() «для сортировки» упоминаются вскользь.
Дальше идёт сканер портов. Автор использует библиотеку SFML. Необычный выбор для такого приложения. Некоторые виды шифрования с потоком fstream. Это несколько страниц кода с побитовыми операторами, магическими числами и так далее. Объяснений мало.
Файловые системы, которые поддерживаются операционной системой Linux. Стандартные каталоги Linux. Права доступа. Довольно подробно, но без применения.
«Запутываем код». Алгоритм ROT13 и шифр Цезаря. Код использует WinAPI.
«Полезные примеры хакинга» — это HTML-клинер (убирает теги), кейлогер, генерирование перестановок (подбор пароля). В тексте есть формула, которую, кажется, набирали в Word’е и непропорционально растянули. Много страниц кода без пояснений. Форматирование очень вольное: отступы в несколько десятков символов без причины, несколько выражений в одну строку.
Десятая глава собрала всё самое аппетитное. Некоторые вещи: бесплатные SMS по всему миру (с помощью веб-сервиса), активация архиватора (с помощью готового кода), приватная операционная система Kodachi (просто ссылка для загрузки дистрибутива), плагин для Firefox, конфиденциальная информация о пользователе Facebook (установить какой-то пакет для Debian и скачать репозиторий), местонахождение пользователя Gmail (можно увидеть отзывы пользователя о заведениях по его идентификатору), обход авторизации WiFi (снова какой-то репозиторий), спам в Telegram’е, «Как убить Android-девайс врага», утилита для поиска информации о человеке, DDOS-атака маршрутизатора. По большей части это готовое программное обеспечение. Программировать ничего не нужно.
В главе «Вместо заключения» дают совет: учить сети, операционные системы, языки Python, PHP и SQL.
В сухом остатке. C++ почти нет. Там, где есть, это больше C (или используется std::string как контейнер, а дальше с помощью c_str() содержимое куда-то передаётся). Загадка, как остальное содержимое вяжется с названием книги.