Dyzzet|
C++ Data Science Алгоритмы Темы · Блог · YouTube · Telegram
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++.

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, а в любых местах функции. Тогда переменная, объявленная в таком блоке, также будет ограничена его рамками.

Читать далее →
§ 10. Работа с файлами

§ 10.1 Режимы работы и основы

Чтобы работать с файлами, нужно создать файловый дескриптор (указатель на FILE). С помощью функции fopen() откроем файл, указав путь к нему и режим (не забудем проверить результат на равенство NULL), поработаем с ним и закроем с помощью fclose().

FILE *file = fopen("myfile.txt", "w+"); // Открываем файл.
if (file == NULL)
{
    // Ошибка. Принимаем меры.
}
// Работаем с файлом.
fclose(file); // Закрываем файл.

Читать далее →
§ 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;
}

Читать далее →
§ 5. Управляющие конструкции

§ 5.1 Операторы срав­не­ния и логи­чес­кие связки

Для сравнения чисел будем пользоваться следующими операторами.

Оператор
Описание
==
Равно
!=
Не равно
>
Больше
>=
Больше или равно
<
Меньше
<=
Меньше или равно

Читать далее →
§ 4. Арифметика

Рассмотрим арифметические операторы языка C.

Оператор
Описание
+
Сложение
-
Вычитание
*
Умножение
/
Деление
%
Остаток от деления

Существуют сокращённые версии операторов для выражений типа foo = foo + bar;.

foo += bar; // foo = foo + bar;
foo -= bar; // foo = foo - bar;
foo *= bar; // foo = foo * bar;
foo /= bar; // foo = foo / bar;
foo %= bar; // foo = foo % bar;

Читать далее →
§ 3. Ввод и вывод

§ 3.1 Форматированный ввод и вывод

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

int foo = 0;
...
foo = 42;

Выведем значение на экран. Для этого нужна функция printf(). Для простоты будем указывать результат работы функции прямо в комментарии.

printf("%d", foo); // 42

Читать далее →
5 4 3
2
1
© MMXI—MMXXVI. RSS
 Boosty
Светлая тема / тёмная тема