Часть 1. Первое знакомство с С++
Глава 1. Написание вашей первой программы 25
Постигая концепции С++ 25
Что такое программа 26
Как пишут программы 26
Инсталляция Dev-C++ 27
Настройка русского языка
Как настроить русский язык в консольных программах?
Настройка Dev-C++ 30
СОВЕТ ДНЯ
Создание первой программы 31
Введение кода 32
Построение вашей программы 34
Выполнение программы 36
Dev-C++ — это не Windows 36
Помощь в Dev-C++ 36
Разбор программ 36
Определение структуры программ С++ 37
Использование в исходном коде комментариев 37
Использование инструкций в программах 38
Объявления 38
Генерирование вывода 39
Вычисление выражений 39
Сохранение результатов выражения 39
Обзор программы Convert продолжается... 40
Глава 2. Премудрости объявления переменных 41
Объявление переменных 41
Объявление разных типов переменных 42
Ограничения, налагаемые на целые числа в С++ 43
Округление до целых значений 43
Ограничения диапазона 43
Решение проблемы усечения дробной части 44
Ограничения, налагаемые на числа с плавающей точкой 44
Перечисление 44
Скорость вычислений 45
Потеря точности 45
Ограниченность диапазона 45
Объявления типов переменных 45
Константы 47
Специальные символы 47
Логические выражения 48
Выражения смешанного типа 48
Глава 3. Выполнение математических операций 50
Бинарная арифметика 50
Анализ выражений 51
Определение порядка операций 52
Выполнение унарных операций 53
Использование операторов присвоения 54
Глава 4. Выполнение логических операций 55
Зачем нужны логические операторы 55
Использование простых логических операторов 55
Хранение логических значений 57
Использование целых переменных в качестве логических 58
Логические операции и действительные переменные 58
Сокращённые вычисления в С++ 59
Бинарные числа в С++ 60
Десятичная система счисления 60
Другие системы счисления 60
Двоичная система счисления 60
Выражения с римскими числами 61
Выполнение побитовых логических операций 62
Побитовые операции с одним битом 62
Использование побитовых операторов 63
Простой пример 64
Практическое применение логических вычислений 65
Глава 5. Операторы управления программой 66
Управление ходом программы с помощью команд ветвления 66
Выполнение циклов 68
Цикл while 68
Использование операторов инкремента и декремента 70
Использование цикла for 71
Избегайте бесконечных циклов 73
Специальные операторы управления циклом 73
Вложенные команды управления 76
Инструкция выбора 77
Часть 2. Становимся функциональными программистами 79
Глава 6. Создание функций 81
Написание и использование функций 81
Определение функции sumSequence( ) 83
Вызов функции sumSequence( ) 83
Разделяй и властвуй 83
Подробный анализ функций 84
Простые функции 85
Функции с аргументами 85
Функции с одним аргументом 85
Функции с несколькими аргументами 87
Функция main( ) 87
Перегрузка функций 88
Определение прототипов функций 89
Хранение переменных в памяти 90
Использование заголовочных файлов 91
_________________
7 стр. Содержание
Глава 7. Хранение последовательностей в массивах 92
Преимущества массивов 92
Работа с массивами 93
Инициализация массива 96
Выход за границы массива 97
Использовать ли массивы 97
Определение и использование массивов с элементами-массивами 98
Использование символьных массивов 98
Создание строки символов 99
Управление строками 100
Тип string 103
Глава 8. Первое знакомство с указателями в С++ 105
Размер переменной 105
Что такое адрес 106
Адресные операторы 106
Использование указателей 108
Сравнение указателей и почтовых адресов 109
Использование разных типов указателей 109
Передача указателей функциям 111
Передача аргументов по значению 112
Передача значений указателей 112
Передача аргументов по ссылке 113
Использование кучи 113
Область видимости 113
Проблемы области видимости 114
Использование блока памяти 115
Глава 9. Второе знакомство с указателями 117
Операции с указателями 117
Повторное знакомство с массивами в свете указателей 118
Использование операций над указателями для адресации внутри массива 119
Использование указателей для работы со строками 120
Почему при работе со строками пользуются указателями 122
Операции с указателями других типов 122
Отличия между указателями и массивами 122
Объявление и использование массивов указателей 124
Использование массивов строк 124
Доступ к аргументам main( ) 126
Аргументы в DOS 127
Аргументы в Dev-C++ 127
Аргументы в Windows 127
Глава 10. Отладка программ на С++ 128
Определение типа ошибки 128
Использование отладочной печати 128
Выявление "жучка" № 1 130
Выявление "жучка" № 2 131
Использование отладчика 134
Что такое отладчик 134
_________________
8 стр. Содержание
Работа с отладчиком 134
Запуск тестовой программы 135
Пошаговое выполнение программы 136
Часть 3. Введение в классы 143
Глава 11. Знакомство с объектно-ориентированным программированием 145
Микроволновые печи и уровни абстракции 145
Приготовление блюд с помощью функций 146
Приготовление "объектно-ориентированных" блюд 146
Классификация микроволновых печей 146
Зачем нужна классификация 147
Глава 12. Классы в С++ 149
Введение в классы 149
Формат класса 149
Обращение к членам класса 150
Глава 13. Работа с классами 154
Активизация объектов 154
Моделирование реальных объектов 155
Зачем нужны функции-члены 155
Добавление функции-члена 156
Создание функции-члена 156
Именование членов класса 157
Вызов функций-членов 157
Обращение к функциям-членам 158
Доступ к членам из функции-члена 159
Именование текущего объекта 160
Разрешение области видимости 161
Определение функции-члена 162
Определение функций-членов вне класса 164
Перегрузка функций-членов 165
Глава 14. Указатели на объекты 167
Определение массивов и указателей 167
Объявление массивов объектов 168
Объявление указателей на объекты 169
Разыменование указателей на объекты 169
Использование стрелок 170
Передача объектов функциям 171
Вызов функции с передачей объекта по значению 171
Вызов функции с передачей указателя 172
Передача объекта по ссылке 173
Зачем использовать указатели и ссылки 174
Возврат к куче 175
Сравнение указателей и ссылок 175
Почему ссылки не используются вместо указателей 175
Использование связанных списков 176
Другие операции над связанным списком 177
Программа LinkedListData 178
Списки в стандартной библиотеке 180
_________________
9 стр. Содержание
Глава 15. Защищённые члены класса: не беспокоить! 181
Защищённые члены 181
Зачем нужны защищённые члены 181
Как устроены защищённые члены 182
Чем хороши защищённые члены 183
Защита внутреннего устройства класса 183
Классы с ограниченным интерфейсом 184
Обращение к защищённым членам 184
Глава 16. Создание и удаление объектов 188
Создание объектов 188
Использование конструкторов 189
Зачем нужны конструкторы 189
Работа с конструкторами 190
Конструирование одного объекта 190
Конструирование нескольких объектов 192
Конструирование составных объектов 192
Что такое деструктор 194
Зачем нужен деструктор 194
Работа с деструкторами 194
Глава 17. Аргументация конструирования 198
Как снабдить конструктор аргументами 198
Зачем конструкторам нужны аргументы 198
Как использовать конструктор с аргументами 199
Перегрузка конструктора 200
Определение конструкторов по умолчанию 203
Конструирование членов класса 204
Конструкторы константных членов 208
Управление последовательностью конструирования 208
Локальные объекты создаются последовательно 209
Статические объекты создаются один раз 209
Все глобальные объекты создаются до вызова main( ) 210
Порядок создания глобальных объектов не определён 210
Члены создаются в порядке их объявления 211
Деструкторы удаляют объекты в порядке, обратном порядку их создания 212
Глава 18. Копирующий конструктор 213
Копирование объекта 213
Зачем нужен копирующий конструктор 213
Использование конструктора копирования 214
Автоматический конструктор копирования 215
"Мелкие" и "глубокие" копии 217
Временные объекты 221
Как избегать временных объектов 222
Аргумент копирующего конструктора 223
Глава 19. Статические члены 224
Определение статических членов 224
Зачем нужны статические члены 224
Использование статических членов 225
Обращение к статическим данным-членам 226
Применение статических данных-членов 227
_________________
10 стр. Содержание
Объявление статических функций-членов 228
Что такое this 230
Глава 20. Наследование классов 233
Зачем нужно наследование 234
Как наследуется класс 234
Использование подкласса 236
Конструирование подкласса 237
Деструкция подкласса 238
Отношение СОДЕРЖИТ 238
Глава 21. Знакомство с виртуальными функциями-членами: настоящие ли они 240
Зачем нужен полиморфизм 243
Как работает полиморфизм 245
Когда функция не является виртуальной 246
Виртуальные особенности 247
Глава 22. Разложение классов 249
Разложение 249
Реализация абстрактных классов 253
Концепция абстрактных классов 254
Создание полноценного класса из абстрактного 255
Передача абстрактных классов 257
Нужны ли чисто виртуальные функции 257
Разделение исходного кода С++ 259
Разделение программы — класс Student 260
Определение пространства имён 261
Реализация класса Student 261
Разделение программы — класс GraduateStudent 262
Реализация приложения 263
Файл проекта 264
Создание файла проекта в Dev-C++ 265
Часть 5. Полезные особенности 269
Глава 23. Оператор присвоения 271
Сравнение операторов и функций 271
Потоковые операторы 272
Мелкое копирование — глубокие проблемы 272
Переопределение оператора присвоения 273
Защита от копирования 276
Глава 24. Использование потоков ввода-вывода 277
Как работают потоки ввода-вывода 277
Знакомство с подклассами fstream 278
Прямое чтение из потока 282
Что такое endl 284
Подклассы strstream 285
Работа с манипуляторами 287
_________________
11 стр. Содержание
Глава 25. Обработка ошибок и исключения 290
Зачем нужен новый механизм обработки ошибок 291
Механизм исключительных ситуаций 293
Так что же мы будем бросать? 295
Глава 26. Множественное наследование 298
Механизм множественного наследования 298
Устранение неоднозначностей множественного наследования 300
Виртуальное наследование 301
Конструирование объектов 306
Отрицательные стороны множественного наследования 306
Глава 27. Шаблоны С++ 308
Обобщение функции в шаблон 309
Шаблоны классов 311
Зачем нужны шаблоны классов 314
Советы по использованию шаблонов 316
Глава 28. Стандартная библиотека шаблонов 317
Контейнер string 317
Контейнер list 320
Итераторы 321
Использование контейнера map 324
Часть 6. Великолепная десятка 329
Глава 29. Десять способов избежать ошибок 331
Включение всех предупреждений и сообщений об ошибках 331
Добейтесь чистой компиляции 332
Используйте последовательный стиль программирования 332
Ограничивайте видимость 332
Комментируйте свою программу 334
Хотя бы один раз выполните программу пошагово 334
Избегайте перегрузки операторов 334
Работа с кучей 334
Используйте для обработки ошибок исключительные ситуации 335
Избегайте множественного наследования 335
Глава 30. Десять основных возможностей Dev-C++ 336
Настройка редактора по вашему вкусу 336
Подсветка парных скобок 337
Включение обработки исключений 337
Включение отладочной информации 338
Создание файла проекта 338
Настройка справки 338
Переустановка точек останова после редактирования файла 339
Избегайте некорректных имён файлов 339
Включите заголовочные файлы в ваш проект 339
Работа с профайлером 339
_________________
12 стр. Содержание
Глава 31. Программа BUDGET 343
BUDGET1 343
BUDGET2 348
BUDGET3 355
Реализация модуля со связанным списком 356
Работа со счетами 358
Классы связанных списков 363
Оценка бюджета 365
BUDGET4 366
Реализация связанного списка в виде шаблона класса 366
Исходный код BUDGET4 368
Подведение итогов 373
BUDGET5 373
Использование шаблона класса из STL 373
Создание списка счетов 378
Приложение. Содержимое прилагаемого компакт-диска 379
_________________
13 стр. Содержание
Моим друзьям и семье, которые помогли мне стать "чайником" в ещё большей степени, чем я есть на самом деле.
Об авторе
Стефан P. Дэвис ( Stephen R. Davis ) живёт с женой и сыном недалеко от Далласа, штат Техас. Он и его семья — авторы множества книг, включая такие бестселлеры, как С++ для "чайников" и С++ Weekend Crash Course. Стефан работает в компании L-3 Communications.
Благодарности
Я считаю странным то, что на обложке любой книги, особенно такой, как эта, написано только одно имя. В действительности свой труд в создание книги вкладывает громадное число людей. Для начала я хотел бы поблагодарить своего главного редактора Мэри Кордер ( Mary Corder ) и агента Клодетт Мур ( Claudette Moore ), направлявших меня при формировании материала этой книги. Во время работы над книгой я значительно повысил свой уровень как редактор и корректор, и в этом мне помогли редакторы первых изданий. И если бы не помощь координатора первого и второго изданий Сьюзанны Томас ( Suzanne Thomas ), эта книга вообще не была бы напечатана. Однако, несмотря ни на что, на обложке представлено только одно имя, а значит, ответственность за все неточности в тексте должен нести именно его обладатель.
Хочу также поблагодарить свою жену Дженни и сына Кинси за их терпение и преданность.
И наконец, новости о последних событиях из мира животных в моём доме. Для тех, кто не читал ни одной из моих книг, объясняю, что такая сводка встречается в них регулярно.
Мои две собаки, Скутер и Труди, чувствуют себя нормально, хотя Труди почти ослеп. Наши два кролика, Бивас и Батхед, отправились на большую зелёную небесную лужайку после почти полуторалетнего проживания на газоне перед нашим домом.
_________________
16 стр. Введение