Оглавление....6
Содержание....7
Введение....24
Принятый подход....24
Примеры кода, используемые в книге....25
Организация книги....25
Примечание для преподавателей....29
Соглашения, используемые в этой книге....30
Системы, на которых разрабатывались примеры для книги....31
Глава 1. Начало расботы с C++....32
Изучение языка С++: с чем придется иметь дело....33
Истоки языка С++: немного истории....34
Язык программирования С....34
Философия программирования на языке С....35
Переход к С++: объектно-ориентированное программирование....36
С++ и обобщенное программирование....38
Происхождение языка программирования С++....38
Переносимость и стандарты....39
Развитие языка....42
Эта книга и стандарты С++....42
Порядок создания программы....42
Создание файла исходного кода....43
Компиляция и компоновка....44
Компиляция и связывание в Unix....45
Компиляция и связывание в Linux....46
Компиляторы командной строки для режима командной строки Windows....46
Компиляторы для Windows....47
С++ в Macintosh....49
Резюме....49
Глава 2. Приступаем к изучению C++....50
Первые шаги в С++....51
Возможности функции main()....52
Заголовок функции как интерфейс....53
Почему функции main() нельзя назначать другое имя....55
Комментарии в языке С++....55
Препроцессор С++ и файл iostream....56
Имена заголовочных файлов....57
Пространства имен....58
Вывод в С++ с помощью cout....59
Манипулятор endl....61
Символ новой строки....61
Форматирование исходного кода С++....62
Лексемы и пробельные символы в исходном коде....62
Стиль написания исходного кода С++....63
Операторы в языке С++....64
Операторы объявления и переменные....64
Операторы присваивания....66
Новый трюк с объектом cout....67
Другие операторы С++....68
Использование cin....68
Конкатенация с помощью cout....69
cin и cout: признак класса....69
Функции....71
Использование функции, имеющей возвращаемое значение....71
Разновидности функций....75
Функции, определяемые пользователем....76
Использование определяемых пользователем функций, имеющих возвращаемое значение....79
Местоположение директивы using в программах с множеством функций....81
Резюме....82
Вопросы для самоконтроля....83
Упражнения по программированию....84
Глава 3. Работа с данными....86
Простые переменные....87
Имена, назначаемые переменным....88
Целочисленные типы....89
Целочисленные типы short, int, long и long long....90
Типы без знаков....95
Выбор целочисленного типа....97
Целочисленные литералы....98
Определение компилятором С++ типа константы....100
Тип char: символы и короткие целые числа....101
Тип bool....110
Квалификатор const....110
Числа с плавающей точкой....112
Запись чисел с плавающей точкой....112
Типы чисел с плавающей точкой....113
Константы с плавающей точкой....115
Преимущества и недостатки чисел с плавающей точкой....116
Арифметические операции в С++....117
Порядок выполнения операций: приоритеты операций и ассоциативность....118
Операция нахождения остатка от деления....120
Преобразования типов....121
Объявления auto в С++1 1....127
Резюме....128
Вопросы для самоконтроля....129
Упражнения по программированию....130
Глава 4. Составные типы....132
Введение в массивы....133
Замечания по программе....135
Правила инициализации массивов....136
Инициализация массивов в С++1 1....137
Строки....137
Конкатенация строковых литералов....139
Использование строк в массивах....139
Риски, связанные с вводом строк....141
Построчное чтение ввода....142
Смешивание строкового и числового ввода....146
Введение в класс string....147
Инициализация строк в С++1 1....149
Другие формы строковых литералов....154
Введение в структуры....155
Использование структур в программах....156
Инициализация структур в С++1 1....159
Может ли структура содержать член типа s tring?....159
Прочие свойства структур....159
Массивы структур....161
Битовые поля в структурах....162
Объединения....163
Перечисления....164
Установка значений перечислителей....166
Диапазоны значений перечислителей....166
Указатели и свободное хранилище....167
Объявление и инициализация указателей....170
Опасность, связанная с указателями....172
Указатели и числа....173
Выделение памяти с помощью операции new....173
Освобождение памяти с помощью операции delete....176
Использование операции new для создания динамических массивов....177
Указатели, массивы и арифметика указателей....180
Замечания по программе....181
Указатели и строки....185
Использование операции new для создания динамических структур....190
Автоматическое, статическое и динамическое хранилище....193
Комбинации типов....195
Альтернативы массивам....197
Шаблонный класс vector....197
Шаблонный класс array (С++11)....198
Сравнение массивов, объектов vector и объектов array....199
Резюме....200
Вопросы для самоконтроля....202
Упражнения по программированию....203
Глава 5. Циклы и выражения отношений....206
Введение в циклы for....207
Части цикла for....208
Возврат к циклу f or....214
Изменение шага цикла....215
Доступ внутрь строк с помощью цикла f or....216
Операции инкремента и декремента....217
Побочные эффекты и точки следования....218
Сравнение префиксной и постфиксной форм....219
Оnерации инкремента и декремента и указатели....220
Комбинация операций присваивания....221
Составные операторы, или блоки....222
Дополнительные синтаксические трюки - операция запятой....223
Выражения отношений....226
Присваивание, сравнение и вероятные ошибки....227
Сравнение строк в стиле C....229
Сравнение строк класса string....231
Цикл while....232
Замечания по программе....234
Сравнение циклов for и while....235
Построение цикла задержки....236
Цикл do while....238
Цикл for, основанный на диапазоне (С++11)....240
Циклы и текстовый ввод....241
Применение для ввода простого cin....241
Спасение в виде cin.get(char)....243
Выбор используемой версии cin.get()....244
Условие конца файла....244
Еще одна версия cin.get()....247
Вложенные циклы и двумерные массивы....251
Инициализация двумерного массива....252
Использование двумерного массива....253
Резюме....254
Вопросы для самоконтроля....255
Упражнения по программированию....256
Глава 6. Операторы ветвления и логические операции....258
Оператор if....259
Оператор if else....260
Форматирование операторов if else....262
Конструкция if else if else....263
Логические выражения....265
Логическая операция "ИЛИ": ||....265
Логическая операция "И": &&....266
Логическая операция "НЕ": ! ....271
Факты, связанные с логическими операциями....272
Альтернативные представления....273
Библиотека символьных функций cctype....273
Операция ?:....276
Оператор switch....277
Использование перечислителей в качестве меток....280
Операторы switch и if else....281
Операторы break и continue....282
Замечания по программе....283
Циклы для чтения чисел....284
Замечания по программе....287
Простой файловый ввод-вывод....288
Текстовый ввод-вывод и текстовые файлы....288
Запись в текстовый файл....289
Чтение текстового файла....293
Резюме....298
Вопросы для самоконтроля....299
Упражнения по программированию....301
Глава 7. Функции как программные модули С++....304
Обзор функций....305
Определение функции....306
Прототипирование и вызов функции....308
Аргументы функций и передача по значению....311
Множественные аргументы....313
Еще одна функция с двумя аргументами....315
Функции и массивы....317
Как указатели позволяют функциям обрабатывать массивы....319
Последствия использования массивов в качестве аргументов....319
Дополнительные примеры функций для работы с массивами....322
Функции, работающие с диапазонами массивов....328
Указатели и const....330
Функции и двумерные массивы ....333
Функции и строки в стиле С....334
Функции с аргументами - строками в стиле С....335
Функции, возвращающие строки в стиле С....336
Функции и структуры....338
Передача и возврат структур....338
Еще один пример использования функций со структурами....340
Передача адресов структур....345
Функции и объекты класса string....347
Функции и объекты array....348
Замечания по программе....350
Рекурсия....350
Рекурсия с одиночным рекурсивным вызовом....350
Рекурсия с множественными рекурсивными вызовами....352
Указатели на функции....353
Основы указателей на функции....354
Пример с указателем на функцию....356
Вариации на тему указателей на функции....357
Упрощение объявлений с помощью typedef....361
Резюме....362
Вопросы для самоконтроля....363
Упражнения по программированию....364
Глава 8. Дополнительные сведения о функциях....368
Встроенные функции С++....369
Ссылочные переменные....372
Создание ссылочных переменных....372
Ссылки как параметры функций....375
Свойства и особенности ссылок....378
Временные переменные, ссылочные аргументы и квалификатор const....380
Использование ссылок при работе со структурами....382
Использование ссылок на объект класса....389
Еще один урок ООП: объекты, наследование и ссылки....392
Когда целесообразно использовать ссылочные аргументы....395
Аргументы по умолчанию....396
Перегрузка функций....399
Пример перегрузки....401
Когда целесообразно использовать перегрузку функций....404
Шаблоны функций....405
Перегруженные шаблоны....408
Ограничения шаблонов....409
Явные специализации....410
Создание экземпляров и специализация....413
Какую версию функции выбирает компилятор?....415
Эволюция шаблонных функций....422
Резюме....425
Вопросы для самоконтроля....426
Упражнения по программированию....427
Глава 9. Модели памяти и пространства имен....430
Раздельная компиляция....431
Продолжительность хранения, область видимости и компоновка....436
Область видимости и связывание....437
Автоматическая продолжительность хранения....438
Переменные со статической продолжительностью хранения....443
Спецификаторы и классификаторы....453
Функции и связывание....456
Языковое связывание....457
Схемы хранения и динамическое выделение памяти....458
Инициализация с помощью операции new....459
Когда new дает сбой....459
new: операции, функции и заменяющие функции....459
Операция new с размещением....460
Пространства имен....464
Традиционные пространства имен С++....464
Новое средство пространств имен....466
Пример пространства имен....473
Пространства имен и будущее....476
Резюме....477
Вопросы для самоконтроля....478
Упражнения по программированию....480
Глава 10. Объекты и классы....484
Процедурное и объектно-ориентированное программирование....485
Абстракции и классы....486
Что такое тип?....487
Классы в С++....487
Реализация функций-членов класса....493
Использование классов....497
Изменение реализации....499
Обзор ситуации на текущий момент....500
Конструкторы и деструкторы классов....501
Усовершенствование класса Stock....506
Обзор конструкторов и деструкторов....514
Изучение объектов: указатель this....515
Массив объектов....521
Область видимости класса....523
Абстрактные типы данных....527
Резюме....531
Вопросы для самоконтроля....532
Упражнения по программированию....532
Глава 11. Работа с классами....536
Перегрузка операций....538
Время в наших руках: разработка п римера перегрузки операции....539
Добавление операции сложения....541
Ограничения перегрузки....544
Дополнительные перегруженные операции....546
Что такое друзья?....548
Создание друзей....550
Общий вид друга: перегрузка операции <<....551
Перегруженные операции: сравнение функций-членов и функций, не являющихся членами....557
Дополнительные сведения о перегрузке: класс Vector....558
Использование члена, хранящего состояние....565
Перегрузка арифметических операций для класса vector....567
Комментарии к реализации....569
Использование класса vector при решении задачи случайного блуждания....570
Автоматические преобразования и приведения типов в классах....573
Преобразования и друзья....584
Резюме....586
Вопросы для самоконтроля....588
Упражнения по программированию....588
Глава 12. Классы и динамическое выделение памяти ....592
Динамическая память и классы....593
Простой пример и статические члены класса....593
Специальные функции-члены....602
Новый усовершенствованный класс string....610
О чем следует помнить при использовании операции new в конструкторах....620
Замечания о возвращаемых объектах....623
Использование указателей на объекты....626
Обзор технических приемов....635
Моделирование очереди....636
Класс Queue....637
Класс Customer....647
Моделирование работы банкомата....650
Резюме....654
Вопросы для самоконтроля....656
Упражнения по программированию....657
Глава 13. Наследование классов....660
Начало: простой базовый класс....662
Порождение класса....664
Конструкторы: варианты доступа....665
Использование производного класса....668
Особые отношения между производным и базовым классами....670
Наследование: отношение является....672
Полиморфное открытое наследование....674
Разработка классов Brass и BrassPlus....675
Статическое и динамическое связывание....686
Совместимость типов указателей и ссылок....686
Виртуальные функции-члены и динамическое связывание....688
Что следует знать о виртуальных методах....691
Управление доступом: protected....694
Абстрактные базовые классы....695
Применение концепции абстрактных базовых классов....698
Философия АБК....703
Наследование и динамическое выделение памяти....704
Случай 1 : производный класс не использует операцию new....704
Случай 2: производный класс использует операцию new....705
Пример наследования с динамическим выделением памяти и дружественными функциями....707
Обзор структуры класса....712
Функции-члены, генерируемые компилятором....712
Другие соображения относительно методов класса....714
Соображения по поводу открытого наследования....717
Сводка функций классов....721
Резюме....722
Вопросы для самоконтроля....722
Упражнения по программированию....724
Глава 14. Повторное использование кода в С++....728
Классы с объектами-членами....729
Класс valarray: краткий обзор....730
Проект класса student....731
Пример класса Student....732
Закрытое наследование....739
Новый вариант класса student....739
Включение или закрытое наследование?....746
Защищенное наследование....747
Переопределение доступа с помощью usinq....747
Множественное наследование....749
Краткий обзор множественного наследования....765
Шаблоны классов....766
Определение шаблона класса....767
Более внимательный взгляд на шаблонные классы....772
Пример шаблона массива и нетипизированные аргументы....777
Универсальность шаблонов....779
Специализации шаблона....782
Шаблоны-члены....785
Шаблонные классы и друзья....789
Резюме....796
Вопросы для самоконтроля....798
Упражнения по программированию....800
Глава 15. Друзья, исключения и многое другое....806
Друзья....807
Дружественные классы....807
Дружественные функции-члены....812
Другие дружественные отношения....814
Вложенные классы....816
Вложенные классы и доступ....818
Вложение в шаблонах....819
Исключения....822
Вызов abort()....823
Возврат кода ошибки....824
Механизм исключений....826
Использование объектов в качестве исключений....828
Спецификации исключений в С++11....832
Раскручивание стека....833
Дополнительные свойства исключений....838
Класс exception....840
Исключения, классы и наследование....844
Потеря исключений....848
Предостережения относительно использования исключений....851
Динамическая идентификация типов....853
Для чего нужен механизм RTTI....853
Как работает механизм RTTI....853
Операция dynamic_ cast....854
Операции приведения типов....861
Резюме....864
Вопросы для самоконтроля....865
Глава 16. Класс string и стандартная библиотека шаблонов....868
Класс string....869
Создание объекта string....869
Ввод для класса string....873
Работа со строками....876
Другие возможности, предлагаемые классом s tring....881
Разновидности строк....882
Классы шаблонов интеллектуальных указателей....883
Использование интеллектуальных указателей....884
Соображения по поводу интеллектуальных указателей....887
Выбор интеллектуального указателя....891
Стандартная библиотека шаблонов (STL)....893
Класс шаблона vector....893
Что еще можно делать с помощью векторов....895
Дополнительные возможности векторов....900
Цикл fоr, основанный на диапазоне (С++11) ....904
Обобщенное программирование....904
Предназначение итераторов....905
Виды итераторов....909
Иерархия итераторов....912
Концепции, уточнения и модели....913
Виды контейнеров....919
Ассоциативные контейнеры....930
Неупорядоченные ассоциативные контейнеры (С++11)....936
Функциональные объекты (функторы)....937
Концепции функторов....938
Предопределенные функторы....940
Адаптируемые функторы и функциональные адаптеры....942
Алгоритмы....944
Группы алгоритмов....945
Основные свойства алгоритмов....945
Библиотека STL и класс s tring....947
Сравнение функций и методов контейнеров....948
Использование STL....950
Шаблон initializer_list (С++11)....958
Замечания по программе....961
Резюме....961
Вопросы для самоконтроля....963
Упражнения по программированию....964
Глава 17. Ввод, вывод и файлы....968
Обзор ввода и вывода в С++....969
Потоки и буферы....970
Потоки, буферы и файл iostream....972
Перенаправление....974
Вывод с помощью cout....976
Перегруженная операция <<....976
Другие методы ostream....978
Очистка выходного буфера....981
Форматирование с помощью cout....982
Ввод с помощью cin....997
Восприятие ввода операцией cin >>....999
Состояния потока....1001
Другие методы класса istream....1005
Другие методы класса istream....1012
Файловый ввод и вывод....1016
Простой файловый ввод-вывод....1017
Проверка потока и is_open()....1020
Открытие нескольких файлов....1021
Обработка командной строки....1021
Режимы файла....1023
Произвольный доступ....1033
Внутреннее форматирование....1041
Резюме....1043
Вопросы для самопроверки....1045
Упражнения по программированию....1046
Глава 18. Новый стандарт С++....1050
Обзор уже известных функциональных средств С++11....1051
Новые типы....1051
Унифицированная инициализация....1051
Объявления....1053
nullptr....1055
Интеллектуальные указатели....1055
Изменения в спецификации исключений....1055
Перечисления с областью видимости....1055
Изменения в классах....1056
Изменения в шаблонах и STL....1057
Ссылка rvalue....1059
Семантика переноса и ссылка rvalue....1060
Необходимость в семантике переноса....1060
Пример семантики переноса....1062
Исследование конструктора переноса....1066
Присваивание....1068
Принудительное применение переноса....1068
Новые возможности классов....1072
Специальные функции-члены....1072
Явно заданные по умолчанию и удаленные методы....1073
Делегирование конструкторов....1075
Наследование конструкторов....1075
Управление виртуальными методами: override и final....1077
Лямбда-функции....1078
Как работают указатели на функции, функторы и лямбда....1078
Более подробно о лямбда-функциях....1082
Оболочки....1084
Оболочка function и неэффективность шаблонов....1085
Решение проблемы....1087
Дополнительные возможности....1088
Шаблоны с переменным. числом аргументов....1089
Пакеты параметров шаблонов и функций....1090
Распаковка пакетов....1091
Использование рекурсии в шаблонных функциях с переменным числом аргументов....1091
Другие средства С++11....1094
Параллельное программирование....1094
Библиотечные дополнения....1095
Низкоуровневое программирование....1095
Смешанные средства....1096
Языковые изменения....1097
Проект Boost....1097
Проект TR1....1098
Использование Boost....1098
Что дальше?....1099
Резюме....1100
Вопросы для самоконтроля....1101
Упражнения по программированию....1103
Приложение А. Основания систем счисления....1106
Десятичные числа (основание 10)....1106
Восьмеричные целые числа (основание 8)....1107
Шестнадцатеричные числа (основание 16)....1107
Двоичные числа (основание 2)....1108
Двоичная и шестнадцатеричная формы записи....1108
Приложение Б. Зарезервированные слова С++....1110
Ключевые слова С++....1110
Альтернативные лексемы....1111
Зарезервированные имена библиотеки С++....1111
Идентификаторы со специальным назначением....1112
Приложение В. Набор символов ASCII....1114
Приложение Г. Приоритеты операций....1120
Приложение Д. Другие операции....1124
Битовые операции....1124
Операции сдвига....1124
Логические битовые операции....1126
Альтернативные представления битовых операций....1128
Примеры использования битовых операций....1129
Операции разыменования членов....1130
alignof (С++11)....1134
noexcept (С++11)....1135
Приложение Е. Шаблонный класс string....1136
Тринадцать типов и константа....1137
Информация о данных, конструкторы и вспомогательные элементы....1138
Конструктор по умолчанию....1140
Конструкторы, использующие строки в стиле C....1141
Конструкторы, использующие часть строки в стиле C....1141
Конструкторы, использующие ссылку lvalue....1141
Конструкторы, использующие ссылку rvalue (С++11)....1143
Конструктор, использующий n копий символа....1143
Конструктор, использующий диапазон....1143
Конструктор, использующий список инициализаторов (С++11)....1144
Различные действия с памятью....1144
Доступ к строке....1144
Базовое присваивание....1146
Поиск в строках....1146
Семейство find()....1146
Семейство rfind()....1147
Семейство find_first_of()....1148
Семейство find_last_of()....1148
Семейство find_first_not_of()....1148
Семейство find_last_not_of()....1149
Методы и функции сравнения....1149
Мдификация строк....1150
Методы присоединения и добавления....1151
Дополнительные методы присваивания....1151
Методы вставки....1152
Методы очистки....1153
Методы замены....1153
Другие методы модификации: сору() и swap()....1154
Ввод и вывод....1154
Приложение Ж. Методы и функции стандартной библиотеки шаблонов....1156
Библиотека STL и С++11....1156
Новые контейнеры....1156
Изменения в контейнерах С++98....1157
Члены, общие для всех или большинства контейнеров....1158
Дополнительные члены для контейнеров последовательностей....1161
Дополнительные операции для множеств и карт....1165
Неупорядоченные ассоциативные контейнеры (С++11)....1167
Функции библиотеки STL....1169
Операции, не модифицирующие последовательности....1170
Операции, видоизменяющие последовательности....1175
Операции сортировки и связанные с ними операции....1185
Числовые операции....1198
Приложение 3. Рекомендуемая литература и ресурсы в Интернете....1202
Рекомендуемая литература....1202
Ресурсы в и нтернете....1204
Приложение И. Переход к стандарту ANSI/ISO С++....1206
Используйте альтернативы для некоторых директив препроцессора....1206
Используйте const вместо #define для определения констант....1206
Используйте inline вместо #define для определения коротких функций....1208
Используйте прототипы функций....1209
Используйте приведения типов....1209
Знакомьтесь с функциональными возможностями С++....1210
Используйте новую организацию заголовочных файлов....1210
Используйте пространства имен....1210
Используйте интеллектуальные указатели....1212
Используйте класс string....1212
Используйте библиотеку STL....1212
Приложение К. Ответы на вопросы для самоконтроля....1214
Ответы на вопросы для самоконтроля из главы 2 ....1214
Ответы на вопросы для самоконтроля из главы 3....1215
Ответы на вопросы для самоконтроля из главы 4....1216
Ответы на вопросы для самоконтроля из главы 5....1218
Ответы на вопросы для самоконтроля из главы 6....1219
Ответы на вопросы для самоконтроля из главы 7....1220
Ответы на вопросы для самоконтроля из главы 8....1222
Ответы на вопросы для самоконтроля из главы 9....1224
Ответы на вопросы для самоконтроля из главы 10....1226
Ответы на вопросы для самоконтроля из главы 11....1228
Ответы на вопросы для самоконтроля из главы 12....1229
Ответы на вопросы для самоконтроля из главы 13....1231
Ответы на вопросы для самоконтроля из главы 14....1233
Ответы на вопросы для самоконтроля из главы 15....1234
Ответы на вопросы для самоконтроля из главы 16....1235
Ответы на вопросы для самоконтроля из главы 17....1237
Ответы на вопросы для самоконтроля из главы 18....1238
Предметный указатель ....1241
В этой книге обсуждается базовый язык С и текущие функциональные средства С++, что делает ее самодостаточной. В ней представлены основы языка С++, иллюстрируемые с помощью коротких и точных программ, которые легко скопировать для дальнейших экспериментов. Вы узнаете о вводе-выводе, о решении повторяющихся задач и возможностях выбора, о способах обработки данных и о функциях. Будут описаны многие средства С++, которые были добавлены к языку С.