
Доступно изложены основы синтаксиса языка C++ и объектно-ориентированного программирования. Описаны функции С++, подробно рассмотрены классы и объекты, инкапсуляция, наследование, полиморфизм, система ввода-вывода С++. Даны советы и рекомендации по разработке современных приложений. Приведены примеры использования шаблонов и библиотеки стандартных шаблонов, описана обработка исключений. Отдельная глава посвящена расширенным возможностям C++.
Для начинающих программистов
Вы изучите:
• Основы объектно-ориентированного программирования
• Синтаксис языка
• Функции С++
• Классы и объекты
• Наследование
• Полиморфизм
• Систему ввода-вывода в C++
• Использование шаблонов
• Обработку исключений
• Базовые принципы разработки современных приложений на С++
Книгу “С++ — это просто” можно купить со скидкой в интернет-магазине издательства “БХВ“.
Об авторе……………………………………………………………………………………………….. 13
Благодарности……………………………………………………………………………………….. 15
Предисловие к третьему изданию…………………………………………………………… 17
Предисловие к первому изданию……………………………………………………………. 19
Глава 1. Введение в ООП……………………………………………………………………….. 21
Истоки…………………………………………………………………………………………………………………………………………. 23
Структурное программирование……………………………………………………………………………………………… 24
Объектно-ориентированное программирование…………………………………………………………………….. 26
Характеристики объектно-ориентированных языков…………………………………………………………….. 28
Объекты………………………………………………………………………………………………………………………………. 28
Классы………………………………………………………………………………………………………………………………… 29
Инкапсуляция……………………………………………………………………………………………………………………… 29
Скрытие данных…………………………………………………………………………………………………………………. 29
Наследование…………………………………………………………………………………………………………………….. 30
Полиморфизм……………………………………………………………………………………………………………………… 31
Отношения включения……………………………………………………………………………………………………….. 31
Шаблоны…………………………………………………………………………………………………………………………….. 32
Обработка исключений……………………………………………………………………………………………………… 32
Многократное использование…………………………………………………………………………………………… 32
Упражнения………………………………………………………………………………………………………………………………… 33
Важное………………………………………………………………………………………………………………………………………… 35
Глава 2. Переходим на C++……………………………………………………………………. 37
Комментарии……………………………………………………………………………………………………………………………… 39
Ввод и вывод в C++……………………………………………………………………………………………………………………. 40
Динамическое объявление переменных…………………………………………………………………………………… 42
Динамическая инициализация………………………………………………………………………………………………….. 43
Вывод типов……………………………………………………………………………………………………………………………….. 43
Синтаксис структуры (struct), объединения (union) и перечисления (enum)………………………… 43
Неименованные объединения и перечисления……………………………………………………………………….. 44
Приведение типов………………………………………………………………………………………………………………………. 45
Пустой указатель (void)…………………………………………………………………………………………………………….. 46
Оператор ::………………………………………………………………………………………………………………………………….. 46
Ссылки………………………………………………………………………………………………………………………………………… 47
Типы обращений к функциям……………………………………………………………………………………………………. 48
Возвращение значения по ссылке…………………………………………………………………………………………….. 51
Спецификатор const…………………………………………………………………………………………………………………… 52
Const-указатели………………………………………………………………………………………………………………….. 53
Const-ссылки………………………………………………………………………………………………………………………. 54
Возврат значений const-переменных……………………………………………………………………………….. 57
Функции-члены типа const………………………………………………………………………………………………… 57
Логический тип данных (bool)………………………………………………………………………………………………….. 58
Упражнения………………………………………………………………………………………………………………………………… 59
Важное………………………………………………………………………………………………………………………………………… 65
Глава 3. Функции………………………………………………………………………………….. 69
Строгая проверка типов……………………………………………………………………………………………………………. 71
Исходные значения для аргументов функции…………………………………………………………………………. 72
Перегрузка функции…………………………………………………………………………………………………………………… 73
Разница в типе возвращаемого значения…………………………………………………………………………. 74
Можно ли задать разные типы данных при помощи typedef?……………………………………….. 75
Можно ли задать разные типы данных при помощи const?…………………………………………… 75
Разные задачи, одно имя……………………………………………………………………………………………………. 76
Перегрузка операторов……………………………………………………………………………………………………………… 76
FAQ по перегрузке операторов…………………………………………………………………………………………. 79
Встраиваемые функции…………………………………………………………………………………………………………….. 79
Зачем полагаться на компилятор?……………………………………………………………………………………. 80
А где гарантия?…………………………………………………………………………………………………………………… 80
Когда ими пользоваться?…………………………………………………………………………………………………… 81
Новый синтаксис возвращаемого типа……………………………………………………………………………………. 81
Функции instance, static, virtual и friend…………………………………………………………………………………… 81
Упражнения………………………………………………………………………………………………………………………………… 82
Важное………………………………………………………………………………………………………………………………………… 85
Глава 4. Классы и объекты……………………………………………………………………. 87
Структуры и классы………………………………………………………………………………………………………………….. 89
Классы и конструкторы…………………………………………………………………………………………………………….. 92
Деструкторы………………………………………………………………………………………………………………………………. 94
Класс Complex……………………………………………………………………………………………………………………………. 95
Указатель this…………………………………………………………………………………………………………………………….. 97
Перегрузка унарных операторов……………………………………………………………………………………………… 98
Объекты и память…………………………………………………………………………………………………………………….. 100
Еще раз о структурах и классах…………………………………………………………………………………………….. 101
Идеальная организация программы………………………………………………………………………………………. 102
Упражнения……………………………………………………………………………………………………………………………… 106
Важное……………………………………………………………………………………………………………………………………… 112
Глава 5. Премудрости классов……………………………………………………………… 115
Статическое и динамическое выделение памяти………………………………………………………………….. 117
Выделение памяти для массивов и структур…………………………………………………………………. 118
Выделение памяти для объектов…………………………………………………………………………………….. 120
Статические члены класса……………………………………………………………………………………………………… 122
Универсальный спецификатор const……………………………………………………………………………………… 124
Перегруженный оператор присваивания и конструктор копирования………………………………. 126
Преобразование данных…………………………………………………………………………………………………………. 129
Преобразование между встроенными типами………………………………………………………………. 129
Преобразование между встроенными и пользовательскими типами………………………….. 130
Преобразование между различными пользовательскими типами данных………………… 132
Процедура преобразования в исходном объекте………………………………………………………….. 132
Процедура преобразования в целевом объекте…………………………………………………………….. 134
Упражнения……………………………………………………………………………………………………………………………… 137
Важное……………………………………………………………………………………………………………………………………… 139
Глава 6. Наследование…………………………………………………………………………. 141
Наследование…………………………………………………………………………………………………………………………… 143
Еще один пример наследования…………………………………………………………………………………………….. 147
Варианты применения наследования……………………………………………………………………………………. 149
Наследование и конструкторы………………………………………………………………………………………………. 151
Виды наследования…………………………………………………………………………………………………………………. 154
Одиночное наследование………………………………………………………………………………………………… 154
Многоуровневое наследование………………………………………………………………………………………. 155
Множественное наследование……………………………………………………………………………………….. 156
Предупреждение………………………………………………………………………………………………………………………. 157
Поэтапная разработка…………………………………………………………………………………………………………….. 158
Упражнения……………………………………………………………………………………………………………………………… 158
Важное……………………………………………………………………………………………………………………………………… 160
Глава 7. Полиморфизм…………………………………………………………………………. 163
Виртуальная функция……………………………………………………………………………………………………………… 165
Чистая виртуальная функция………………………………………………………………………………………………….. 167
Абстрактный класс………………………………………………………………………………………………………………….. 168
Связывание функций……………………………………………………………………………………………………………….. 168
Анатомия виртуальных функций……………………………………………………………………………………………. 170
Для чего применять виртуальные функции?…………………………………………………………………………. 177
Срезание объекта…………………………………………………………………………………………………………………….. 177
Виртуальные деструкторы……………………………………………………………………………………………………… 179
Вызов виртуальных функций из конструкторов/деструкторов…………………………………… 181
Виртуальные базовые классы………………………………………………………………………………………………… 181
Упражнения……………………………………………………………………………………………………………………………… 183
Важное……………………………………………………………………………………………………………………………………… 184
Глава 8. Система ввода-вывода в C++………………………………………………….. 187
Требования к системе ввода-вывода……………………………………………………………………………………… 189
Решение с использованием потоков в C++…………………………………………………………………………….. 190
Предопределенные потоковые объекты………………………………………………………………………………… 191
Библиотека iostream………………………………………………………………………………………………………………… 191
Класс istream……………………………………………………………………………………………………………………………. 192
Класс ostream…………………………………………………………………………………………………………………………… 194
Вывод символов в кодировке Unicode……………………………………………………………………………. 195
Класс iostream………………………………………………………………………………………………………………………….. 196
Манипуляторы потока……………………………………………………………………………………………………………. 196
Пользовательские манипуляторы………………………………………………………………………………………….. 199
Пользовательские манипуляторы с аргументами…………………………………………………………. 200
Работа с потоками ввода-вывода в файл………………………………………………………………………………. 202
Символьный ввод-вывод…………………………………………………………………………………………………………. 203
Открытие файла……………………………………………………………………………………………………………….. 203
Чтение данных………………………………………………………………………………………………………………….. 204
Обнаружение конца файла (EOF)…………………………………………………………………………………… 204
Закрытие файла……………………………………………………………………………………………………………….. 204
Программа копирования файлов……………………………………………………………………………………………. 204
Ввод-вывод строк…………………………………………………………………………………………………………………….. 205
Ввод-вывод записей…………………………………………………………………………………………………………………. 206
Прямой доступ…………………………………………………………………………………………………………………………. 208
Режимы открытия файла…………………………………………………………………………………………………………. 210
Строковые потоки……………………………………………………………………………………………………………………. 211
Работа с istrstream……………………………………………………………………………………………………………. 212
Ввод-вывод объектов………………………………………………………………………………………………………………. 213
Сериализация…………………………………………………………………………………………………………………………… 214
Обработка ошибок ввода-вывода………………………………………………………………………………………….. 215
Взаимодействие с файловой системой…………………………………………………………………………………… 217
Упражнения……………………………………………………………………………………………………………………………… 220
Важное……………………………………………………………………………………………………………………………………… 222
Глава 9. Расширенные возможности C++…………………………………………….. 225
Отношения включения…………………………………………………………………………………………………………….. 227
Дружественные (friend) функции и классы……………………………………………………………………………. 229
Еще одно применение дружественной функции……………………………………………………………………. 231
Предупреждение………………………………………………………………………………………………………………………. 234
Ключевое слово explicit………………………………………………………………………………………………………….. 234
Ключевое слово mutable…………………………………………………………………………………………………………. 236
Пространство имен………………………………………………………………………………………………………………….. 237
Способы применения пространства имен……………………………………………………………………………… 240
Использование оператора разрешения контекста………………………………………………………… 240
Ключевое слово using……………………………………………………………………………………………………… 241
Динамическая идентификация типа (RTTI)…………………………………………………………………………… 242
Приведение типов в C++………………………………………………………………………………………………………….. 244
static_cast………………………………………………………………………………………………………………………….. 245
dynamic_cast……………………………………………………………………………………………………………………… 246
const_cast………………………………………………………………………………………………………………………….. 248
reinterpret_cast…………………………………………………………………………………………………………………. 248
Предупреждение………………………………………………………………………………………………………………. 249
Указатели на члены классов…………………………………………………………………………………………………… 249
Упражнения……………………………………………………………………………………………………………………………… 253
Важное……………………………………………………………………………………………………………………………………… 254
Глава 10. Шаблоны……………………………………………………………………………… 257
Шаблоны функций…………………………………………………………………………………………………………………… 259
Что происходит во время компиляции?………………………………………………………………………….. 261
Шаблоны функций для пользовательских типов………………………………………………………………….. 261
Еще одна шаблонная функция……………………………………………………………………………………………….. 262
Явная специализация обобщенной функции…………………………………………………………………. 264
Функция с набором обобщенных типов………………………………………………………………………………… 264
Шаблоны и макросы……………………………………………………………………………………………………………….. 265
Сортировка на основе шаблона…………………………………………………………………………………………….. 266
Шаблоны классов……………………………………………………………………………………………………………………. 267
Шаблон класса связного списка…………………………………………………………………………………………….. 271
Полезные советы по шаблонам………………………………………………………………………………………………. 273
Вариативные шаблоны…………………………………………………………………………………………………………… 275
Области применения шаблонов……………………………………………………………………………………………… 276
Упражнения……………………………………………………………………………………………………………………………… 276
Важное……………………………………………………………………………………………………………………………………… 278
Глава 11. Обработка исключений………………………………………………………… 279
Обработка исключений в C++………………………………………………………………………………………………… 281
Работа с библиотечными классами исключений………………………………………………………………….. 284
Библиотечные исключения при создании очереди………………………………………………………. 286
Еще один пример……………………………………………………………………………………………………………… 288
Работа с пользовательскими классами исключений……………………………………………………………. 290
Полезные советы……………………………………………………………………………………………………………………… 292
Спецификация исключений…………………………………………………………………………………………………….. 293
Необработанные исключения………………………………………………………………………………………………… 294
Интеллектуальные указатели и динамические контейнеры………………………………………………… 295
Упражнения……………………………………………………………………………………………………………………………… 297
Важное……………………………………………………………………………………………………………………………………… 298
Глава 12. Стандартная библиотека шаблонов……………………………………… 301
Стандартная библиотека шаблонов……………………………………………………………………………………… 303
Компоненты STL……………………………………………………………………………………………………………………… 304
Контейнеры………………………………………………………………………………………………………………………. 304
Итераторы………………………………………………………………………………………………………………………… 305
Алгоритмы………………………………………………………………………………………………………………………… 306
Вектор (vector)………………………………………………………………………………………………………………………….. 307
Другие операции………………………………………………………………………………………………………………. 308
Вектор объектов класса Point…………………………………………………………………………………………………. 309
Список (list)………………………………………………………………………………………………………………………………. 311
Множество (set) и мультимножество (multi-set)…………………………………………………………………….. 313
Отображение (map) и мультиотображение (multi-map)………………………………………………………… 317
Стек (stack)……………………………………………………………………………………………………………………………….. 319
Очередь (queue)………………………………………………………………………………………………………………………… 320
Объект-функция………………………………………………………………………………………………………………… 322
Упражнения……………………………………………………………………………………………………………………………… 323
Важное……………………………………………………………………………………………………………………………………… 324
Предметный указатель…………………………………………………………………………. 327

Яшавант Канеткар — автор книг и курсов по языкам C, C++, Java, Python, структурам данных, .NET, IoT. Его книги переведены на хинди, гуджарати, японский, корейский и китайский языки. Получил степень бакалавра в Технологическом институте имени Веермата Джиджабая (VJTI, Мумбаи) и магистра технических наук в Индийском Институте Технологий (IIT, Канпур). В настоящее время является директором нескольких IT-компаний. Был удостоен множества престижных наград за свои предпринимательские, профессиональные и академические достижения, а также за вклад в IT-образование Индии.
-
С++ — это просто. 3-е издание.
1000 ₽
850 ₽