Язык программирования C++. Базовый курс

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

Большинство примеров из книги было пересмотрено так, чтобы использовать новые средства языка и продемонстрировать их наилучшие способы применения. Книга «Язык программирования C++. Базовый курс» - не только проверенное руководство для новичков в C++, она содержит также авторитетное обсуждение базовых концепций и методик языка C++ и является ценным ресурсом для опытных программистов, особенно желающих побыстрей узнать об усовершенствованиях C++11.
Начни быстрей и достигни большего.
Узнайте, как использовать новые средства языка C++11 и стандартной библиотеки для быстрого создания надежных программ, а также ознакомьтесь с высокоуровневым программированием
Учитесь на примерах, в которых показаны передовые стили программирования и методики проектирования.
Изучите рациональное зерно: почему язык C++11 работает именно так
Воспользуйтесь множеством перекрестных ссылок, способных помочь вам объединить взаимосвязанные концепции и проникнуть в суть.
Ознакомьтесь с современными методиками обучения и извлеките пользу из упражнений, в которых подчеркиваются ключевые моменты, позволяющие избежать проблем.

Author(s): Стенли Б. Липпман и др.
Edition: 5-е изд.
Publisher: И.Д. Вильямс
Year: 2014

Language: Russian
Pages: 1124
Tags: Библиотека;Компьютерная литература;C / C++;

Содержание......Page 8
Введение......Page 20
Для кого написана эта книга......Page 21
Изменения в пятом издании......Page 22
Соглашения, принятые в книге......Page 23
От издательства......Page 26
Глава 1. Первые шаги......Page 27
1.1. Создание простой программы на языке C++......Page 28
1.1.1. Компиляция и запуск программы......Page 29
1.2. Первый взгляд на ввод-вывод......Page 32
1.3. Несколько слов о комментариях......Page 37
1.4.1. Оператор while......Page 39
1.4.2. Оператор for......Page 41
1.4.3. Ввод неизвестного количества данных......Page 43
1.4.4. Оператор if......Page 46
1.5.1. Класс Sales item......Page 49
1.5.2. Первый взгляд на функции-члены......Page 53
1.6. Программа для книжного магазина......Page 54
Термины......Page 56
Часть I. Основы......Page 61
2.1. Простые встроенные типы......Page 63
2.1.1. Арифметические типы......Page 64
2.1.2. Преобразование типов......Page 68
2.1.3. Литералы......Page 72
2.2.1. Определения переменных......Page 76
2.2.2. Объявления и определения переменных......Page 80
2.2.3. Идентификаторы......Page 82
2.2.4. Область видимости имен......Page 84
2.3. Составные типы......Page 86
2.3.1. Ссылки......Page 87
2.3.2. Указатели......Page 88
2.3.3. Понятие описаний составных типов......Page 94
2.4. Спецификатор const......Page 97
2.4.1. Ссылка на константу......Page 99
2.4.2. Указатели и спецификатор const......Page 101
2.4.3. Спецификатор const верхнего уровня......Page 103
2.4.4. Переменные constexpr и константные выражения......Page 105
2.5. Работа с типами......Page 107
2.5.1. Псевдонимы типов......Page 108
2.5.2. Спецификатор типа auto......Page 109
2.5.3. Спецификатор типа decltype......Page 111
2.6. Определение собственных структур данных......Page 113
2.6.1. Определение типа Sales data......Page 114
2.6.2. Использование класса Sales data......Page 115
2.6.3. Создание собственных файлов заголовка......Page 118
Термины......Page 120
Глава 3. Типы string, vector и массивы......Page 125
3.1. Пространства имен и объявления using......Page 126
3.2.1. Определение и инициализация строк......Page 128
3.2.2. Операции со строками......Page 130
3.2.3. Работа с символами строки......Page 136
3.3. Библиотечный тип vector......Page 143
3.3.1. Определение и инициализация векторов......Page 144
3.3.2. Добавление элементов в вектор......Page 148
3.3.3. Другие операции с векторами......Page 150
3.4.1. Использование итераторов......Page 155
3.4.2. Арифметические действия с итераторами......Page 161
3.5. Массивы......Page 163
3.5.1. Определение и инициализация встроенных массивов......Page 164
3.5.2. Доступ к элементам массива......Page 167
3.5.3. Указатели и массивы......Page 169
3.5.4. Символьные строки в стиле С......Page 174
3.5.5. Взаимодействие с устаревшим кодом......Page 177
3.6. Многомерные массивы......Page 179
Термины......Page 185
Глава 4. Выражения......Page 189
4.1.1. Фундаментальные концепции......Page 190
4.1.2. Приоритет и порядок......Page 192
4.1.3. Порядок вычисления......Page 194
4.2. Арифметические операторы......Page 196
4.3. Логические операторы и операторы отношения......Page 199
4.4. Операторы присвоения......Page 203
4.5. Операторы инкремента и декремента......Page 206
4.6. Операторы доступа к членам......Page 209
4.7. Условный оператор......Page 210
4.8. Побитовые операторы......Page 212
4.9. Оператор sizeof......Page 217
4.10. Оператор запятая......Page 219
4.11. Преобразование типов......Page 220
4.11.1. Арифметические преобразования......Page 221
4.11.2. Другие неявные преобразования......Page 223
4.11.3. Явные преобразования......Page 225
4.12. Таблица приоритетов операторов 227 Резюме 229 Термины......Page 231
5.1. Простые операторы......Page 235
5.3. Условные операторы......Page 238
5.3.1. Оператор if......Page 239
5.3.2. Оператор switch......Page 243
5.4.1. Оператор while......Page 249
5.4.2. Традиционный оператор for......Page 250
5.4.3. Серийный оператор for......Page 253
5.4.4. Оператор do while......Page 255
5.5.1. Оператор break......Page 256
5.5.2. Оператор continue......Page 257
5.5.3. Оператор goto......Page 258
5.6. Блоки try и обработка исключений......Page 259
5.6.1. Оператор throw......Page 260
5.6.2. Блок try......Page 261
5.6.3. Стандартные исключения......Page 264
Термины ч......Page 266
6.1. Основы функций......Page 269
6.1.1. Локальные объекты......Page 273
6.1.2. Объявление функций......Page 275
6.1.3. Раздельная компиляция......Page 276
6.2. Передача аргументов......Page 277
6.2.1. Передача аргумента по значению......Page 278
6.2.2. Передача аргумента по ссылке......Page 279
6.2.3. Константные параметры и аргументы......Page 282
6.2.4. Параметры в виде массива......Page 285
6.2.5. Функция main(): обработка параметров командной строки......Page 290
6.2.6. Функции с переменным количеством параметров......Page 291
6.3.1. Функции без возвращаемого значения......Page 294
6.3.2. Функции, возвращающие значение......Page 295
6.3.3. Возвращение указателя на массив......Page 301
6.4. Перегруженные функции......Page 304
6.4.1. Перегрузка и область видимости......Page 309
6.5.1. Аргументы по умолчанию......Page 310
6.5.2. Встраиваемые функции и функции constexpr......Page 313
6.5.3. Помощь в отладке......Page 316
6.6. Подбор функции......Page 319
6.6.1. Преобразование типов аргументов......Page 322
6.7. Указатели на функции......Page 324
Резюме......Page 328
Термины......Page 329
Глава 7. Классы......Page 333
7.1.1. Разработка класса Sales data......Page 334
7.1.2. Определение пересмотренного класса Sales data......Page 337
7.1.3. Определение функций, не являющихся членом класса, но связанных с ним......Page 342
7.1.4. Конструкторы......Page 344
7.1.5. Копирование, присвоение и удаление......Page 349
7.2. Управление доступом и инкапсуляция......Page 351
7.2.1. Друзья......Page 353
7.3.1. Снова о членах класса......Page 355
7.3.2. Функции, возвращающие указатель *this......Page 359
7.3.3. Типы классов......Page 363
7.3.4. Снова о дружественных отношениях......Page 365
7.4. Область видимости класса......Page 368
7.4.1. Поиск имен в области видимости класса......Page 369
7.5.1. Список инициализации конструктора......Page 374
7.5.2. Делегирующий конструктор......Page 379
7.5.3. Роль стандартного конструктора......Page 380
7.5.4. Неявное преобразование типов класса......Page 382
7.5.5. Агрегатные классы......Page 386
7.5.6. Литеральные классы......Page 387
7.6. Статические члены класса......Page 389
Резюме......Page 394
Термины......Page 395
Часть II. Библиотека C++......Page 399
Глава 8. Библиотека ввода и вывода......Page 401
8.1. Классы ввода-вывода......Page 402
8.1.1. Объекты ввода-вывода не допускают копирования и присвоения......Page 403
8.1.2. Флаги состояния......Page 404
8.1.3. Управление буфером вывода......Page 407
8.2. Ввод и вывод в файл......Page 409
8.2.1. Использование объектов файловых потоков......Page 410
8.2.2. Режимы файла......Page 413
8.3. Строковые потоки......Page 415
8.3.1. Использование класса istringstream......Page 416
8.3.2. Использование класса ostringstream......Page 418
Термины......Page 419
Глава 9. Последовательные контейнеры......Page 421
9.1. Обзор последовательных контейнеров......Page 422
9.2. Обзор библиотечных контейнеров......Page 425
9.2.1. Итераторы......Page 428
9.2.2. Типы-члены классов контейнеров......Page 431
9.2.3. Функции-члены begin() и end()......Page 432
9.2.4. Определение и инициализация контейнера......Page 433
9.2.5. Присвоение и функция swap()......Page 437
9.2.7. Операторы сравнения......Page 440
9.3.1. Добавление элементов в последовательный контейнер......Page 441
9.3.2. Доступ к элементам......Page 447
9.3.3. Удаление элементов......Page 449
9.3.4. Специализированные функции контейнера f orward list......Page 452
9.3.5. Изменение размеров контейнера......Page 454
9.3.6. Некоторые операции с контейнерами делают итераторы недопустимыми......Page 455
9.4. Как увеличивается размер вектора......Page 459
9.5.1. Дополнительные способы создания строк......Page 464
9.5.2. Другие способы изменения строки......Page 466
9.5.3. Операции поиска строк......Page 469
9.5.5. Числовые преобразования......Page 473
9.6. Адаптеры контейнеров......Page 475
Термины......Page 479
Глава 10. Обобщенные алгоритмы......Page 483
10.1. Краткий обзор......Page 484
10.2.1. Алгоритмы только для чтения......Page 487
10.2.2. Алгоритмы, записывающие элементы контейнера......Page 490
10.2.3. Алгоритмы, переупорядочивающие элементы контейнера......Page 493
10.3.1. Передача функций алгоритму......Page 496
10.3.2. Лямбда-выражения......Page 498
10.3.3. Захват и возвращение значений лямбда-выражениями......Page 504
10.3.4. Привязка аргументов......Page 510
10.4.1. Итераторы вставки......Page 516
10.4.2. Потоковые итераторы......Page 518
10.4.3. Реверсивные итераторы......Page 523
10.5.1. Пять категорий итераторов......Page 527
10.5.2. Параметрическая схема алгоритмов......Page 530
10.5.3. Соглашения об именовании алгоритмов......Page 532
10.6. Алгоритмы, специфические для контейнеров......Page 533
Термины......Page 536
Глава 11. Ассоциативные контейнеры......Page 539
11.1. Использование ассоциативных контейнеров......Page 540
11.2.1. Определение ассоциативного контейнера......Page 543
11.2.2. Требования к типу ключа......Page 545
11.2.3. Тип pair......Page 547
11.3.1. Итераторы ассоциативных контейнеров......Page 550
11.3.2. Добавление элементов......Page 553
11.3.3. Удаление элементов......Page 556
11.3.4. Индексация карт......Page 557
11.3.5. Доступ к элементам......Page 559
11.3.6. Карта преобразования слов......Page 564
11.4.1. Использование неупорядоченного контейнера......Page 568
11.4.2. Управление ячейками......Page 569
11.4.3. Требования к типу ключа неупорядоченных контейнеров......Page 570
Термины......Page 572
Глава 12. Динамичская память......Page 575
12.1. Динамическая память и интеллектуальные указатели......Page 576
12.1.1. Класс shared_ptr......Page 577
12.1.2. Непосредственное управление памятью......Page 586
12.1.3. Использование указателя shared_ptr с оператором new......Page 593
12.1.4. Интеллектуальные указатели и исключения......Page 597
12.1.5. Класс unique_ptr......Page 600
12.1.6. Класс weak_ptr......Page 604
12.2. Динамические массивы......Page 608
12.2.1. Оператор new и массивы......Page 609
12.2.2. Класс allocator......Page 615
12.3.1. Проект программы......Page 619
12.3.2. Определение классов программы запросов......Page 622
Термины......Page 627
Часть III. Инструменты для разработчиков классов......Page 629
Глава 13. Управление копированием......Page 631
13.1.1. Конструктор копий......Page 632
13.1.2. Оператор присвоения копии......Page 636
13.1.3. Деструктор......Page 638
13.1.4. Правило три/пять......Page 641
13.1.5. Использование спецификатора = default......Page 644
13.1.6. Предотвращение копирования......Page 645
13.2. Управление копированием и ресурсами......Page 649
13.2.1. Классы, действующие как значения......Page 650
13.2.2. Определение классов, действующих как указатели......Page 653
13.3. Функция swap()......Page 656
13.4. Пример управления копированием......Page 660
13.5. Классы, управляющие динамической памятью......Page 666
13.6.1. Ссылки на r-значение......Page 675
13.6.2. Конструктор перемещения и присваивание при перемещении......Page 678
13.6.3. Ссылки на r-значение и функции-члены......Page 692
Термины......Page 697
Глава 14. Перегрузка операторов и преобразований......Page 701
14.1. Фундаментальные концепции......Page 702
14.2. Операторы ввода и вывода......Page 707
14.2.1. Перегрузка оператора вывода <<......Page 708
14.2.2. Перегрузка оператора ввода >>......Page 709
14.3. Арифметические операторы и операторы отношения......Page 712
14.3.1. Операторы равенства......Page 713
14.3.2. Операторы отношения......Page 714
14.4. Операторы присвоения......Page 715
14.5. Оператор индексирования......Page 717
14.6. Операторы инкремента и декремента......Page 719
14.7. Операторы доступа к членам......Page 722
14.8. Оператор вызова функции......Page 724
14.8.1. Лямбда-выражения — объекты функции......Page 726
14.8.2. Библиотечные объекты функций......Page 728
14.8.3. Вызываемые объекты и тип function......Page 730
14.9. Перегрузка, преобразование и операторы......Page 734
14.9.1. Операторы преобразования......Page 735
14.9.2. Избегайте неоднозначных преобразований......Page 739
14.9.3. Подбор функций и перегруженные операторы......Page 744
Резюме......Page 746
Термины......Page 747
Глава 15. Объектно-ориентированное программирование......Page 749
15.1. Краткий обзор ООП......Page 750
15.2.1. Определение базового класса......Page 752
15.2.2. Определение производного класса......Page 754
15.2.3. Преобразования и наследование......Page 761
15.3. Виртуальные функции......Page 765
15.4. Абстрактные базовые классы......Page 770
15.5. Управление доступом и наследование......Page 774
15.6. Область видимости класса при наследовании......Page 780
15.7. Конструкторы и функции управления копированием......Page 786
15.7.1. Виртуальные деструкторы......Page 787
15.7.2. Синтезируемые функции управления копированием и наследование......Page 788
15.7.3. Функции-члены управления копированием производного класса......Page 791
15.7.4. Унаследованные конструкторы......Page 795
15.8. Контейнеры и наследование......Page 797
15.8.1. Разработка класса Basket......Page 798
15.9. Возвращаясь к запросам текста......Page 803
15.9.1. Объектно-ориентированное решение......Page 804
15.9.2. Классы Query_base и Query......Page 809
15.9.3. Производные классы......Page 811
15.9.4. Виртуальные функции eval()......Page 815
Термины......Page 819
Глава 16. Шаблоны и обобщенное программирование......Page 823
16.1.1. Шаблоны функций......Page 824
16.1.2. Шаблоны класса......Page 832
16.1.3. Параметры шаблона......Page 843
16.1.4. Шаблоны-члены......Page 848
16.1.5. Контроль создания экземпляра......Page 851
16.1.6. Эффективность и гибкость......Page 853
16.2. Дедукция аргумента шаблона......Page 855
16.2.1. Преобразования и параметры типа шаблона......Page 856
16.2.2. Явные аргументы шаблона функции......Page 859
16.2.3. Замыкающие типы возвращаемого значения и трансформация типа......Page 861
16.2.4. Указатели на функцию и дедукция аргумента......Page 864
16.2.5. Дедукция аргумента шаблона и ссылки......Page 865
16.2.6. Функция std::move()......Page 869
16.2.7. Перенаправление......Page 872
16.3. Перегрузка и шаблоны......Page 875
16.4. Шаблоны с переменным количеством аргументов......Page 880
16.4.1. Шаблоны функции с переменным количеством аргументов......Page 882
16.4.2. Развертывание пакета......Page 884
16.4.3. Перенаправление пакетов параметров......Page 886
16.5. Специализация шаблона......Page 889
Резюме......Page 896
Термины......Page 897
Часть IV. Дополнительные темы......Page 899
17.1. Тип tuple......Page 901
17.1.1. Определение и инициализация кортежей......Page 903
17.1.2. Использование кортежей для возвращения нескольких значений......Page 905
17.2.1. Определение и инициализация наборов битов......Page 908
17.2.2. Операции с наборами битов......Page 911
17.3. Регулярные выражения......Page 914
17.3.1. Использование библиотеки регулярных выражений......Page 915
17.3.2. Типы итераторов классов соответствия и regex......Page 922
17.3.3. Использование подвыражений......Page 927
17.3.4. Использование функции regex replace()......Page 931
17.4. Случайные числа......Page 935
17.4.1. Процессоры случайных чисел и распределения......Page 936
17.4.2. Другие виды распределений......Page 941
17.5.1. Форматированный ввод и вывод......Page 945
17.5.2. Не форматированные операции ввода-вывода......Page 954
17.5.3. Произвольный доступ к потоку......Page 958
Резюме......Page 963
Термины......Page 964
Глава 18. Инструменты для крупномасштабных программ......Page 967
18.1.1. Передача исключений......Page 968
18.1.2. Обработка исключения......Page 972
18.1.3. Блок try функции и конструкторы......Page 975
18.1.4. Спецификатор исключения noexcept......Page 976
18.1.5. Иерархии классов исключений......Page 980
18.2.1. Определение пространств имен......Page 983
18.2.2. Использование членов пространства имен......Page 992
18.2.3. Классы, пространства имен и области видимости......Page 997
18.2.4. Перегрузка и пространства имен......Page 1001
18.3. Множественное и виртуальное наследование......Page 1004
18.3.1. Множественное наследование......Page 1005
18.3.2. Преобразования и несколько базовых классов......Page 1008
18.3.3. Область видимости класса при множественном наследовании......Page 1011
18.3.4. Виртуальное наследование......Page 1013
18.3.5. Конструкторы и виртуальное наследование......Page 1017
Термины......Page 1020
19.1. Контроль распределения памяти......Page 1025
19.1.1. Перегрузка операторов new и delete......Page 1026
19.1.2. Размещающий оператор new......Page 1030
19.2. Идентификация типов времени выполнения......Page 1031
19.2.1. Оператор dynamic_cast......Page 1032
19.2.2. Оператор typeid......Page 1034
19.2.3. Использование RTTI......Page 1036
19.2.4. Класс type_info......Page 1039
19.3. Перечисления......Page 1040
19.4. Указатель на член класса......Page 1044
19.4.1. Указатели на переменные-члены......Page 1045
19.4.2. Указатели на функции-члены......Page 1047
19.4.3. Использование функций-членов как вызываемых объектов......Page 1051
19.5. Вложенные классы......Page 1054
19.6. Класс объединения, экономящий место......Page 1058
19.7. Локальные классы......Page 1065
19.8.1. Битовые поля......Page 1067
19.8.2. Спецификатор volatile......Page 1069
19.8.3. Директивы компоновки: extern "С"......Page 1070
Резюме......Page 1074
Термины......Page 1075
А.1. Имена и заголовки стандартной библиотеки......Page 1079
А.2. Краткий обзор алгоритмов......Page 1084
А.2.1. Алгоритмы поиска объекта......Page 1085
А.2.2. Другие алгоритмы, осуществляющие только чтение......Page 1086
А.2.3. Алгоритмы бинарного поиска......Page 1087
А.2.4. Алгоритмы записи в элементы контейнера......Page 1088
А.2.5. Алгоритмы сортировки и разделения......Page 1091
А.2.6. Общие функции изменения порядка......Page 1093
А.2.7. Алгоритмы перестановки......Page 1095
А.2.8. Алгоритмы набора для отсортированных последовательностей......Page 1096
А.2.9. Минимальные и максимальные значения......Page 1097
А.2.10. Числовые алгоритмы......Page 1099
А.3.1. Распределение случайных чисел......Page 1100
А.3.2. Процессоры случайных чисел......Page 1102
Предметный указатель......Page 1105