Оглавление
Часть I. Первое знакомство с C + + 21
Глава 1. Написание вашей первой программы 23
Глава 2. Премудрости объявления переменных 33
Глава 3. Выполнение математических операций 41
Глава 4. Выполнение логических операций 46
Глава 5. Операторы управления программой 55
Часть II. Становимся программистами 67
Глава 6. Создание функций 69
Глава 7. Хранение последовательностей в массивах 79
Глава 8. Первое знакомство с указателями в C++ 90
Глава 9. Второе знакомство с указателями 100
Глава 10. Прочие функциональные особенности 111
Глава 11. Отладка программ на C + + 119
Часть III. "Классическое" программирование 139
Глава 12. Знакомство с объектно-ориентированным программированием 141
Глава 13. Классы в C++ 144
Глава 14. Работа с классами 149
Глава 15. Создание указателей на объекты 160
Глава 16. Защищенные члены класса: не беспокоить! 173
Глава 17. Создание и удаление объектов: конструктор и деструктор 179
Глава 18. Аргументация конструирования 187
Глава 19. Копирующий конструктор 201
Глава 20. Статические члены 211
Часть IV. Наследование 225
Глава 21. Наследование классов 227
Глава 22. Знакомство с виртуальными функциями-членами: настоящие ли они 233
Глава 23. Разложение классов 245
Часть V. Полезные особенности 265
Глава 24. Перегрузка операторов 267
Глава 25. Перегрузка оператора присвоения 280
Глава 26. Использование потоков ввода-вывода 286
Глава 27. Обработка ошибок и исключения 299
Глава 28. Множественное наследование 306
Часть VI. Великолепная десятка 315
Глава 29. Десять способов избежать ошибок 317
Приложение А. Словарь терминов 322
Содержание
Об авторе 12
Благодарности 13
Введение 14
Об этой книге 14
О чем эта книга 14
Что такое C++ 14
Соглашения, используемые в книге 15
Что можно не читать 15
Нелепые предположения 15
Как организована эта книга 16
В конце каждой части... 16
Часть 1. Первое знакомство с C++ 17
Часть 2. Становимся программистами 17
Часть 3. "Классическое" программирование 17
Часть 4. Наследование 17
Часть 5. Полезные особенности 17
Часть 6. Великолепная десятка 17
Использованные в этой книге пиктограммы 18
Что дальше 18
Часть I. Первое знакомство с C + + 19
Глава 1. Написание вашей первой программы 21
Постигая концепции C++ 21
Что такое программа 22
Как пишут программы 22
Создание первой программы 23
Введение кода 23
Создание выполнимого файла 25
Выполнение программы 26
GNU — это не Windows 26
Помощь в GNU C++ 27
Разбор программ 27
Определение структуры программ C++ 27
Использование в исходном коде комментариев 27
Использование инструкций в программах 28
Объявления 28
Генерирование вывода 29
Вычисление выражений 29
Сохранение результатов выражения 30
Обзор программы Convert продолжается... 30
Глава 2. Премудрости объявления переменных 31
Объявление переменных 31
Объявление разных типов переменных 32
Ограничения, налагаемые на целые числа в C++ 32
Решение проблемы усечения дробной части 33
Ограничения, налагаемые на числа с плавающей точкой 34
Объявления типов переменных 35
Типы констант 36
Специальные символы 36
Выражения смешанного типа 37
Глава 3. Выполнение математических операций 39
Бинарная арифметика 39
Анализ выражений 40
Определение порядка операций 41
Выполнение унарных операций 42
Использование операторов присвоения 42
Глава 4. Выполнение логических операций 44
Зачем нужны логические операторы 44
Использование простых логических операторов 44
Логические операции и действительные переменные 45
Бинарные числа в C++ 47
Десятичная система счисления 47
Другие системы счисления 48
Двоичная система счисления 48
Выполнение битовых логических операций 49
Битовые операции с одним битом 49
Использование битовых операторов 50
Простой пример 51
Зачем придуманы эти глупые операторы 52
Глава 5. Операторы управления программой 53
Управление ходом программы с помощью команд ветвления 53
Выполнение циклов 55
Цикл while 55
Использование операторов инкремента и декремента 56
Использование цикла for 57
Избегайте бесконечных циклов 59
Специальные операторы циклов 60
Вложенные команды управления 62
Инструкция выбора 63
Часть II. Становимся программистами 65
Глава 6. Создание функций 67
Написание и использование функций 67
Подробный анализ функций 69
Простые функции 70
Функции с аргументами 70
Перегрузка функций 73
Определение прототипов функций 74
Хранение переменных в памяти 75
Глава 7. Хранение последовательностей в массивах 77
Преимущества массивов 77
Работа с массивами 78
Инициализация массива 80
Выход за границы массива 81
Использовать ли массивы 81
Определение и использование массивов 82
Использование символьных массивов 82
Управление строками 84
Написание функции, соединяющей две строки 84
Функции C++ для работы со строками 86
Обработка символов типа wchar_t 87
Устранение устаревших функций вывода 87
Глава 8. Первое знакомство с указателями в С + + 88
Что такое адрес 88
Использование указателей 89
Сравнение указателей и почтовых адресов 90
Использование разных типов указателей 91
Передача указателей функциям 93
Передача аргументов по значению 93
Передача значений указателей 93
Передача аргументов по ссылке 94
Использование кучи 94
Область видимости 94
Проблемы области видимости 96
Использование блока памяти 96
Глава 9. Второе знакомство с указателями 98
Операции с указателями 98
Повторное знакомство с массивами в свете указателей 99
Использование операций над указателями для адресации внутри массива 100
Использование указателей для работы со строками 101
Операции с указателями других типов 104
Отличия между указателями и массивами 104
Объявление и использование массивов указателей 105
Использование массивов строк 106
Доступ к аргументам main() 107
Глава 10. Прочие функциональные особенности 109
Зачем разбивать программу на модули 109
Пример большой программы 110
Разделение программы FunctionDemo 111
Отделение модуля sumSequence() 111
Создание модуля MainModule.cpp 113
Создание файла проекта 113
Создание файла проекта в GNU C + + 114
Создание файла проекта в Visual C + + 114
Использование директивы #include 115
Использование стандартных библиотек C + + 116
Глава 11. Отладка программ на С+ + 117
Определение типа ошибки 117
Использование отладочной печати 117
Выявление "жучка" № 1 118
Выявление "жучка" № 2 121
Использование отладчика 124
Что такое отладчик 124
Выбор отладчика 124
Запуск тестовой программы 125
Пошаговое выполнение программы 126
Пошаговый режим с входом в функции 128
Использование точек останова 129
Просмотр и редактирование переменных 129
Первая программа BUDGET 132
Часть III. "Классическое" программирование 137
Глава 12. Знакомство с объектно-ориентированным программированием 139
Микроволновые печи и уровни абстракции 139
Приготовление блюд с помощью функций 140
Приготовление "объектно-ориентированных" блюд 140
Классифицирование микроволновых печей 140
Зачем нужна классификация 141
Глава 13. Классы в С+ + 142
Введение в классы 142
Формат класса 142
Обращение к членам класса 143
Пример программы 144
Глава 14. Работа с классами 147
Активизация объектов 147
Моделирование реальных объектов 148
Зачем нужны функции-члены 148
Добавление функции-члена 149
Создание функции-члена 149
Именование членов класса 150
Вызов функций-членов 150
Обращение к функциям-членам 151
Доступ к членам из функции-члена 151
Разрешение области видимости 153
Определение функции-члена 154
Определение функций-членов вне класса 155
Перегрузка функций-членов 156
Глава 15. Создание указателей на объекты 158
Определение массивов указателей 158
Объявление массивов объектов 159
Объявление указателей на объекты 160
Разыменование указателей на объекты 160
Использование стрелок 161
Передача объектов функциям 161
Вызов функции с передачей объекта по значению 161
Вызов функции с передачей указателя 162
Зачем передавать указатель 162
Передача объекта по ссылке 164
Возврат к куче 165
Использование связанных списков 165
Массив 165
Связанный список 166
Другие операции над связанным списком 167
Свойства связанных списков 168
Программа LinkedListData 168
Глава 16. Защищенные члены класса: не беспокоить! 171
Защищенные члены 171
Зачем нужны защищенные члены 171
Как устроены защищенные члены 172
Чем хороши защищенные члены 173
Защита внутреннего устройства класса 173
Классы с ограниченным интерфейсом 174
Обращение к защищенным членам 174
"Друг всегда уступить готов место в шлюпке и круг..." 174
Глава 17. Создание и удаление объектов: конструктор и деструктор 177
Создание объектов 177
Использование конструкторов 178
Зачем нужны конструкторы 178
Работа с конструкторами 179
Что такое деструктор 182
Зачем нужен деструктор 182
Работа с деструкторами 183
Глава 18. Аргументация конструирования 185
Как снабдить конструктор аргументами 185
Зачем конструкторам нужны аргументы 186
Как использовать конструктор с аргументами 186
Перегрузка конструктора 188
Определение конструкторов по умолчанию 190
Конструирование членов класса 191
Управление последовательностью конструирования 195
Локальные объекты создаются последовательно 196
Статические объекты создаются один раз 196
Все глобальные объекты создаются до вызова main() 196
Порядок создания глобальных объектов не определен 197
Члены создаются в порядке их объявления 198
Деструкторы удаляют объекты в порядке, обратном порядку их создания 198
Глава 19. Копирующий конструктор 199
Копирование объекта 199
Зачем это нужно 199
Использование конструктора копирования 200
Автоматический конструктор копирования 201
"Мелкие" и "глубокие" копии 203
Временные объекты 206
Глава 20. Статические члены 209
Определение статических членов 209
Зачем нужны статические данные 209
Использование статических членов 210
Обращение к статическим данным-членам 210
Применение статических данных-членов 212
Объявление статических функций-членов 212
Бюджет с классами — BUDGET2.CPP 215
Часть IV. Наследование 223
Глава 21. Наследование классов 225
Зачем нужно наследование 225
Как наследуется класс 227
Конструирование подкласса 229
Отношение СОДЕРЖИТ 229
Глава 22. Знакомство с виртуальными функциями-членами: настоящие ли они 231
Зачем нужен полиморфизм 234
Как работает полиморфизм 235
Полиморфное приготовление закуски 237
Когда функция не является виртуальной 239
Виртуальные особенности 241
Глава 23. Разложение классов 243
Разложение 243
Реализация абстрактных классов 246
Концепция абстрактных классов 248
Создание полноценного класса из абстрактного 249
Передача абстрактных классов 251
Нужны ли чисто виртуальные функции 251
Рационализация бюджета: BUDGET3.CPP 253
Часть V. Полезные особенности 263
Глава 24. Перегрузка операторов 265
Перегрузка операторов: давайте жить в гармонии 265
Операторная функция 266
А подробнее? 269
operator+() 269
operator*-+() 271
Операторы как функции-члены 272
Еще одна перегрузка 273
Перегрузка операторов с помощью неявного преобразования типов 274
Приведение объектов пользовательских типов 275
Оператор явного преобразования 276
Правила для неявных преобразований 277
Глава 25. Перегрузка оператора присвоения 279
Опасная работа, коварная работа, кошмарная работа... 279
Знакомство с перегрузкой оператора присвоения 280
Глубокая проблема создания мелких копий 281
Почленный подход к С 282
Возврат результата присвоения 283
Защита членов 283
Глава 26. Использование потоков ввода-вывода 285
Нырнем в поток... 285
Знакомство с подклассами fstream 287
Подклассы strstream 290
Манипулирование манипуляторами 291
Написание собственных операторов вставки 294
Создание "умных" операторов 296
Глава 27. Обработка ошибок и исключения 299
Зачем нужен новый механизм обработки ошибок 300
Механизм исключительных ситуаций 301
Так что же мы будем бросать? 303
Глава 28. Множественное наследование 306
Механизм множественного наследования 306
Устранение неоднозначностей множественного наследования 307
Виртуальное наследование 308
Конструирование объектов 312
Отрицательные стороны множественного наследования 313
Часть VI. Великолепная десятка 315
Глава 29. Десять способов избежать ошибок 317
Включение всех предупреждений и сообщений об ошибках 317
Добейтесь чистой компиляции 318
Используйте последовательный стиль программирования 318
Ограничивайте видимость 318
Комментируйте свою программу 320
Хотя бы один раз выполните программу пошагово 320
Избегайте перегрузки операторов 320
Работа с кучей 320
Используйте исключительные ситуации для обработки ошибок 321
Избегайте множественного наследования 321
Приложение А. Словарь терминов 322
Предметный указатель 327
Стефан Р. Дэвис "С++ для чайников" 2003 г.