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

Виктор Штерн. Основы C++: методы программной инженерии

880 страниц. Лори, 2003

Victor Shtern. Core C++. A Software Engineering Approach. Prentice Hall, 2000

Название «Core C++» правильнее было бы перевести не как «Основы C++», а как «ядро языка», то есть язык без стандартной библиотеки: отдельной такой главы действительно нет.

Книга с претензией. Первая тема первой главы «Объектно-ориентированный подход» — «Истоки кризиса программного обеспечения». То есть читателя ждут эссе о методах управления разработкой.

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

Читать далее →
9 марта 2021
Обзоры книг по C++. Учебная литература. Часть III. Книги Герберта Шилдта

А. Фридман, Л. Кландер, М. Михаэлис, Г. Шилдт. C/C++. Архив программ (2001)

В этой части обсуждаются только книги Герберта Шилдта на русском языке. У этого автора также есть книги по другим языкам — C, C♯ и Java. Герберт Шилдт был членом комитета ANSI/ISO по стандартизации языка C++.

Герберт Шилдт. Самоучитель C++

688 страниц. БХВ, 2006

Herbert Schildt. Teach Yourself C++. McGraw-Hill, 1998

Очень рано появляются классы, автор будто бы спешит обсуждать ООП. Указатели, массивы, ссылки и многие другие вещи вводятся будто между делом.

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

Описывается стандарт C++98, изложение недостаточно глубокое.

Приложения: отличия C и C++ (одна страница), ответы и решения (больше 180 страниц), список английских технических терминов, описание дискеты.

Читать далее →
15 февраля 2021
Нужно ли учить C перед C++

Учить С++ можно по-разному. Тезис, что учить C перед C++ вовсе не обязательно, верный. Эти языки эволюционировали отдельно, хотя и влияли друг на друга. Но как можно игнорировать факт, что C++ основан на C и вбирает в себя значительную его часть? Попытаемся проанализировать проблему с точки зрения целей такого обучения и методов их достижения.

Посмотрим выступление Кейт Грегори на конференции, почитаем учебный план «Яндекса» и статью Бьерна Страуструпа, создателя языка C++.

Выступление Кейт Грегори

Часовое выступление Кейт Грегори на CppCon’е в 2015 «Перестаньте преподавать C» наделало шума. На одном из слайдов (он скрыт, его нет на видео, но слайды можно скачать и посмотреть) представлено резюме доклада:

Слайды

«На сегодняшний день большинство людей, которые собираются помочь другим изучать C++, начинают с „введения в C“. И я верю, что это вносит большой вклад в то, что в мире появляется много плохого кода на C++. В последние годы я преподаю C++ (и даю рекомендации тем, кто учат его самостоятельно) совершенно по-другому. Никаких строк типа char*, strlen, strcmp, strcpy, printf и обычных массивов []. Указатели вводятся очень поздно. Ссылки идут до указателей, полиморфизм показывается на ссылках, а не указателях. Умные указатели, подобно и обычным „сырым указателям“ (как результат вызова new или операции &), оставлены до того времени, когда они понадобятся. Стандартная библиотека как можно раньше, и современный код на C++ с первого урока».

Читать далее →
7 февраля 2021
Обзоры книг по 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).

Читать далее →
3 января 2021
Обзоры книг по C++. Учебная литература. Часть I

Ален И. Голуб. Верёвка достаточной длины, чтобы... выстрелить себе в ногу. Правила программирования на Си и Си++

272 страницы. Бином, 2001

Allen I. Holub. Enough Rope to Shoot Yourself in the Foot. Rules for C and C++ Programming. McGraw–Hill, 1995

Сборник советов от программиста, консультанта и преподавателя — сначала на общие темы, затем по языку C и, наконец, языку C++. Несмотря на возраст, книгу трудно назвать устаревшей.

Содержание: процесс проектирования, общие проблемы разработки программ, форматирование и документация, имена и идентификаторы, правила программирования, препроцессор, правила, относящиеся к языку C, правила программирования на C++ (проектирование и реализация, проблемы сцепления, ссылки; конструкторы, деструкторы и operator=(); виртуальные функции, перегрузка, управление памятью, шаблоны, исключения).

Высказывание «C позволяет очень просто выстрелить себе в ногу. На C++ сделать это сложнее, но если получится, оторвёт всю ногу» (C makes it easy to shoot yourself in the foot; C++ makes it harder but when you do, it blows away your whole leg) приписывают Бьерну Страуструпу.

Харви Дейтел, Пол Дейтел. Как программировать на C++

1456 страниц. Бином, 2008

Harvey Deitel, Paul Deitel. C++: How to Program. Prentice Hall, 2005

Авторы также выпускают книги по языкам C и C♯‎. Книга вполне подойдёт для новичков, но с оговорками. По году публикации понятно, что что-то новее стандарта C++03 искать не нужно. Однако первая же программа, «Hello, world», использует заголовочный файл <iostream.h> ещё из достандартного C++, cout из глобального пространства имён и пропускает тип возвращаемого значения функции main() (просто main() вместо int main()).

// Первая программа на C++
#include <iostream.h>
 
main()
{
    cout << "Добро пожаловать в C++\n";
 
    return 0;   //показывает, что программа успешно окончена
}

Читать далее →
24 декабря 2020
Обзоры книг по C++. Книги Бьерна Страуструпа

Бьерн Страуструп — автор языка C++. Варианты имени: Бьярне, Бьёрн.

Язык программирования C++. Специальное издание

1136 страниц. Бином, 2017

Bjarne Stroustrup. The C++ Programming Language. Special Edition. Addison-Wesley, 2000

Описан стандарт C++98. Автор время от времени отвлекается на эссе о том, как проектировался язык. Один небольшой раздел так и называется — «Философские замечания». Изложение весьма непростое, нелинейное. К концу первой главы, не самой короткой, автор так и не приступает к системному описанию языка, но уже даёт конкретные советы:

«Не используйте встраиваемые функции, разве что для значительной оптимизации».

Читать далее →
Обзоры книг по C++

Это будет серия публикаций о большом количестве книг по C++. Книг по этому языку действительно много, они разные, как разными бывают и цели у читателей. Поставим нескромную задачу — помочь сориентироваться в этом море литературы.

Понятно, что сто книг не могут быть полностью уникальными, поэтому они разбиты на условные группы. Если какая-то книга выделяется на фоне остальных, она удостаивается большего внимания.

Первый стандарт C++ был принят в 1995 году (C++ ANSI 1995), но первый международный — только в 1998 (ISO/IEC 14882:1998), поэтому первый и более ранние версии будем считать «достандартным» C++.

  1. Бьерн Страуструп
  2. Учебная литература: I II III IV
  3. Русскоязычные авторы: I II III IV
  4. Стандартная библиотека
  5. Структуры данных, алгоритмы, решение задач [li]Профессиональная литература: I II III
  6. Специализированные
  7. Англоязычные книги
  8. Что выбрать? (обновляется)
19 июля 2020
Поиск Кёнига

Поиск Кёнига в языке C++ — это набор правил для поиска неквалифицированных (без оператора разрешения области видимости ::) имён функций и операторов. По-другому он называется поиском, зависящим от аргументов, по-английски — argument-dependent lookup (ADL), Koenig lookup.

ADL в упрощённой формулировке означает, что при поиске имени функции компилятор будет рассматривать не только то пространство имён, в котором она находится, но ещё и пространства имён, которые содержат типы аргументов этой функции. В отличие от перегрузки функций, ADL — особенность вызова функции, а не её объявления [Дьюхерст07, 96—97].

Причины появления

Герб Саттер пишет [Саттер05, 118]:

«Причина [...] заключается в том, чтобы обеспечить коду, использующему объект x типа X, возможность работать с частью его интерфейса, состоящей из функций, не являющихся членами (например, инструкция cout << x использует оператор operator<<, который не является членом класса X) так же легко, как и функции-члены (например, вызов x.f() не требует выполнения специального поиска, поскольку очевидно, что поиск f выполняется в области видимости X)».

Попробуем разобраться.

Читать далее →
§ 11. Классы памяти

Этот параграф не столько раскрывает новую тему, сколько консолидирует знания и опыт, почерпнутые вами ранее.

1. Все переменные, которые вы просто объявляете и используете внутри функций, являются автоматическими (стековыми). Можно (но не нужно, потому что оно подразумевается) писать слово auto (в языке C++ с некоторых пор это ключевое слово стали использовать по-новому).

auto int foo = 0;

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

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

Фигурные скобки можно расставлять не только в конструкциях типа if или for, а в любых местах функции. Тогда переменная, объявленная в таком блоке, также будет ограничена его рамками.

Читать далее →
§ 9. Структуры, битовые поля и объединения

§ 9.1 Структуры

Структура — это общее имя для набора переменных. Если переменная — это тарелка, то структура — это поднос с тарелками. Или менажница.

struct Point
{
    int x;
    int y;
};

Переменные одного типа можно объявлять вместе. Давайте создадим один экземпляр (назовём его point), а затем заполним поля x и y (используя оператор точка .).

struct Point
{
    int x, y;
};
 
int main()
{
    struct Point point;
    point.x = 0;
    point.y = 0;
}

Читать далее →
4 3
2
1
© MMXI—MMXXII. RSS. Поддержать сайт
Светлая тема / тёмная тема