МОДУЛЬ 1. Основы С + + ................................................................................... 13
Краткая история С++.......................................................................................... 14
Язык С: Заря современной эры программирования...................................................14
Потребность в С++ ..............................................................................................15
С++ родился........................................................................................................17
ЭволюцияС++ .................................................................................................... 17
Как С++ соотносится с языками Java и C # .......................................................... 18
Объектно-ориентированное программирование..................................................... 20
Инкапсуляция......................................................................................................21
Полиморфизм......................................................................................................22
Наследование......................................................................................................23
Первая простая программа.................................................................................. 24
Ввод программы..................................................................................................25
Компиляция программы ......................................................................................25
Запуск программы ..............................................................................................26
Первый программный пример строка за строкой....................................................27
Обработка синтаксических ошибок ......................................................................30
Вторая простая программа ................................................................................. 31
Использование операторов................................................................................. 33
Ввод с клавиатуры.............................................................................................. 35
Некоторые дополнительные возможности вывода ..................................................37
Еще один тип данных.......................................................................................... 38
Проект 1-1: Преобразование футов в метры...........................................................40
Два управляющих предложения ........................................................................... 43
Предложение if ................................................................................................... 43
Циклы.................................................................................................................. 45
Использование программных блоков........................................................................46
Знак точки с запятой и позиционирование ................................................................48
Практика использования отступов ........................................................................... 49
Проект 1-2: Создание таблицы преобразования футов в метры.................................... 50
Знакомимся с функциями .......................................................................................... 52
Библиотеки С++........................................................................................................ 55
Ключевые слова С++.................................................................................................. 55
Идентификаторы........................................................................................................ 56
Вопросы для самопроверки .........................................................................................57
МОДУЛЬ 2 . Знакомимся с данными, типами и операторами .......................................... 59
Почему так важны типы данных.................................................................................. 60
Типы данных С++...................................................................................................... 60
Целые числа...............................................................................................................63
Символы ................................................................................................................... 65
Типы данных с плавающей точкой................................................................................67
Булев тип данных .......................................................................................................68
Tип void .....................................................................................................................69
Проект 2-1: Разговор с Марсом.................................................................................... 70
Литералы................................................................................................................... 72
Шестнадцатеричные и восьмеричные литералы ........................................................... 73
Строковые литералы................................................................................................. 74
Символьные Esc-последовательности...........................................................................74
Подробнее о переменных.......................................................................................... 76
Инициализация переменной ......................................................................................76
Динамическая инициализация................................................................................... 77
Операторы .............................................................................................................. 78
Арифметические операторы ...................................................................................... 78
Инкремент и декремент............................................................................................. 79
Операторы отношения (сравнения) и логические ........................................................81
Проект 2-2: Конструирование логической операции исключающее ИЛИ.........................84
Оператор присваивания............................................................................................ 87
Составные присваивания...........................................................................................87
Преобразование типов в операциях присваивания .................................................... 88
Выражения ............................................................................................................ 89
Преобразование типа в выражениях..........................................................................90
Приведение типа..................................................................................................... 90
Пробелы и скобки .................................................................................................. 92
Проект 2-3: Вычисление регулярных платежей по ссуде ............................................92
Вопросы для самопроверки .....................................................................................96
МОДУЛЬ. 3. Предложения управления про граммой ................................................ 97
Предложение if .................................................................................................... 98
Условные выражения............................................................................................ 100
Вложенные предложения if ...................................................................................101
Цепочка if-else-if...................................................................................................102
Пpeдлoжeниe switch ............................................................................................ 104
Bлoжeнныe пpeдлoжeния switch............................................................................ 108
Проект 3-1: Начинаем строить справочную систему С + + ..................................... 109
Циклы................................................................................................................ 112
Некоторые варианты цикла for .............................................................................114
Опущенные секции ..............................................................................................115
Бесконечный цикл for............................................................................................117
Цикл с отсутствующим телом.................................................................................117
Объявление переменных управления циклом внутри цикла for ................................118
Цикл while .......................................................................................................... 120
Цикл do-while ...................................................................................................... 122
Проект 3-2: Усовершенствование справочной системы С + + ................................. 124
Использование break для выхода из цикла............................................................. 128
Использование continue........................................................................................ 130
Проект З-З: Завершаем разработку справочной системы С++ ................................. 131
Вложенные циклы ............................................................................................... 135
Использование предложения goto .......................................................................... 136
Вопросы для самопроверки ................................................................................... 137
МОДУЛЬ 4 . Массивы, строки и указатели .............................................................. 139
Одномерные массивы............................................................................................ 140
Границы не проверяются! ......................................................................................144
Двумерные массивы.............................................................................................. 145
Многомерные массивы........................................................................................... 146
Проект 4-1: Упорядочение массива ....................................................................... 147
Строки................................................................................................................. 150
Основы техники строк..............................................................................................150
Ввод строки с клавиатуры ......................................................................................151
Некоторые библиотечные функции обработки строк ............................................... 153
strcpy() .................................................................................................................153
strcat() ................................................................................................................. 154
strcmp() ............................................................................................................... 154
strlen() .................................................... .............................................................154
Пример обработки строк........................................................................................... 155
Использование завершающего нуля.......................................................................... 156
Инициализация массивов ........................................................................................ 157
Инициализация массивов неопределенной длины........................................................ 160
Массивы строк........................................................................................................ 162
Указатели ............................................................................................................ 164
Что такое указатели?............................................................................................. 164
Операторы указателей............................................................................................ 165
Базовый тип указателя имеет большое значение......................................................167
Операции присваивания посредством указателя..........................................................168
Выражения с указателями .................................................................................169
Арифметика указателей......................................................................................170
Сравнение указателей........................................................................................ 172
Указатели и массивы.................................................................................................. 172
Индексация указателя........................................................................................ 175
Строковые константы................................................................................................ 177
Проект4-2:Переворачивание строки .................................................................. 178
Массивы указателей.................................................................................................. 181
Соглашение о нулевом указателе.......................................................................... 183
Указатель на указатель.............................................................................................. 184
Вопросы для самопроверки ................................................................................... 186
МОДУЛЬ 5 . В едение в функции .................................................................. 187
Основы функций ........................................................................................................ 188
Общая форма определения функции.............................................................. 188
Создание функции................................................................................................189
Использование аргументов ..............................................................................190
Использование предложения геШгп .............................................................. 192
Возвращаемые значения...................................................................................195
Использование функций в выражениях.........................................................197
Правила видимости.................................................................................................... 199
Локальная область видимости.........................................................................199
Глобальная область видимости ......................................................................205
Передача в функции указателей и массивов....................................................... 208
Передача указателя............................................................................................. 209
Передача массива................................................................................................210
Передача строк..................................................................................................... 213
Возврат указателей.................................................................................................... 214
Функция тат() .......................................................................................................... 216
argc и argv: аргументы функции main() ................................................................ 216
Передача числовых аргументов командной строки.................................... 219
Прототипы функций .................................................................................................. 220
Заголовки содержат прототипы ...................................................................... 222
Рекурсия....................................................................................................................... 223
Проект5-1:Быстрое упорядочение ...................................................................... 227
Вопросы для самопроверки ................................................................................... 231
МОДУЛЬ 6 . Подробнее о функциях .............................................................233
Два подхода к передаче аргументов .................................................................... 234
Как С++ передает аргументы ........................................................................... 234
Использование указателя для создания вызова по ссылке.....................236
Параметры-ссылки.................................................................................................... 238
Возврат ссылок..................................................................................................... 243
Независимые ссылочные переменные .........................................................246
Несколько ограничений при использовании ссылочных переменных . . . 247
Перегрузка функций.................................................................................................. 247
Автоматическое преобразование типов и перегрузка............................... 252
Проект 6-1: Создание перегруженных функций для вывода на экран...........255
Аргументы функций с инициализацией по умолчанию.................................... 261
Аргументы с инициализацией по умолчанию или перегрузка?................263
Правильное использование аргументов с инициализацией по умолчанию. . 265
Перегрузка функций и неоднозначность.............................................................. 266
Вопросы для самопроверки ................................................................................... 269
МОДУЛЬ 7 . Подробнее о типах данных и операторах ................. 271
Описатели const и volatile.......................................................................................... 272
const ........................................................................................................................272
volatile .....................................................................................................................274
Описатели классов памяти ..................................................................................... 275
a u t o .......................................................................................................................... 276
ex te rn ........................................................................................................................276
Статические переменные................................................................................... 278
Регистровые переменные .................................................................................282
Перечислимые типы .................................................................................................. 284
typedef............................................................................................................................ 288
Побитовые операторы .............................................................................................. 289
Операторы И, ИЛИ, исключающее ИЛИ и Н Е ...............................................290
Операторы сдвига................................................................................................ 295
Проект 7-1: Создание функций циклического побитового сдвига.................... 298
Оператор? ................................................................................................................... 303
Оператор-запятая...................................................................................................... 304
Множественное присваивание ............................................................................... 306
Составное присваивание.......................................................................................... 306
Иcпoльзoвaниe oпepaтopa sizeof ...........................................................................307
Обзор относительных приоритетов ...................................................................... 308
Вопросы для самопроверки ................................................................................... 309
МОДУЛЬ 8 . Классы и объекты ..................................................................... 311
Основы классов.......................................................................................................... 312
Общая форма класса...........................................................................................312
Определение класса и создание объектов.......................................................313
Добавление в класс функций-членов.............................................................. 317
Проект 8-1: Создание класса справочника..........................................................321
Конструкторы и деструкторы................................................................................... 326
Параметрические конструкторы...................................................................... 329
Добавление конструктора в класс Vehicle .................................................... 331
Другой способ инициализации.........................................................................333
Встроенные функции ................................................................................................ 334
Создание встроенных функций внутри класса ............................................ 336
Проект 8-2: Создание класса очереди.................................................................. 339
Массивы объектов...................................................................................................... 344
Инициализация массивов объектов .............................................................. 345
Указатели на объекты................................................................................................ 347
Ссылки на объекты .................................................................................................... 350
Вопросы для самопроверки ................................................................................... 350
МОДУЛЬ 9 . Подробнее о классах ....................................................................351
Перегрузка конструкторов....................................................................................... 352
Присваивание объектов............................................................................................ 353
Передача объектов функциям................................................................................. 355
Конструкторы, деструкторы и передача объектов..........................................357
Передача объектов по ссылке.............................................................................. 358
Потенциальные проблемы при передаче объектов....................................... 360
Возврат объектов ....................................................................................................... 361
Создание и использование конструктора копий ................................................. 363
Дружественные функции .......................................................................................... 367
Структуры и объединения ....................................................................................... 372
Структуры...................................................................................................................372
Объединения ...........................................................................................................374
Ключевое слово this.................................................................................................... 378
Перегрузка операторов ............................................................................................ 379
Перегрузка операторов с использованием функций-членов...........................................381
Другие вопросы ......................................................................................................384
Использование функций-членов для перегрузки унарных операторов . .................... 385
Операторные функции-не члены............................................................................. 390
Использование дружественной функции для перегрузки унарного оператора...................................................................................................................394
Советы и ограничения при перегрузке операторов...................................................... 396
Проект 9-1: Создание класса, определяющего множество .......................................... 397
Вопросы для самопроверки ..................................................................................... 407
МОДУЛЬ 10. Наследование, виртуальные функции и полиморфизм ....................................................................................................409
Основы наследования................................................................................................ 410
Доступ к членам и наследование......................................................................... 413
Управление доступом к базовому классу .............................................................. 417
Использование защищенных членов ....................................................................... 419
Конструкторы и наследование ..................................................................................422
Вызов конструктора базового класса ...............................................................424
Проект 10-1: Расширение MaccaVehicle.................................................................429
Создание многоуровневой иерархии классов ......................................................433
Наследование от нескольких базовых классов......................................................436
Когда выполняются функции конструктора и деструктора.................................437
Указатели на производные классы........................................................................... 439
Ссылки на производные типы....................................... .......................................441
Виртуальные функции и полиморфизм................................................................... 441
Основы виртуальных функций...............................................................................441
Виртуальные функции наследуются ................................................................. 444
Зачем нужны виртуальные функции?................................................................. 446
Приложение виртуальных функций........................................................................... 447
Чистые виртуальные функции и абстрактные классы ...................................... 451
Вопросы для самопроверки ................................................................................... 455
МОДУЛЬ 11. С++ и система ввода-вывода............................................................ 457
Старая и новая системы ввода-вывода................................................................ 458
Потоки С++................................................................................................................... 459
Предопределенные потоки С++......................................................................... 460
Потоковые классы С++.............................................................................................. 460
Перегрузка операторов ввода-вывода ................................................................462
Создание операторных функций вывода.......................................................462
Использование дружественных функций для перегрузки операторов вывода..............................................................................................464
Перегрузка операторов ввода .........................................................................466
Форматированный ввод-вывод.................................................................... .. . . . . 468
Форматирование с помощью функций-членов ios .................................... 468
Использование манипуляторов ввода-вывода............................................ 475
Создание собственных манипуляторных функций .................................... 477
Файловый ввод-вывод.............................................................................................. 480
Открытие и закрытие файла..............................................................................480
Чтение и запись текстовых файлов.................................................................483
Неформатированный и двоичный ввод-вывод............................................ 485
Чтение и запись блоков данных ...................................................................... 487
Больше о функция ввода-вывода...........................................................................489
Другие варианты g e t() .........................................................................................489
getline() .................................................................................................................. 491
Обнаружение символа ЕОР ..............................................................................491
peek() и putback() ................................................................................................ 491
flush() .....................................................................................................................492
Проект 11-1: Утилита сравнения файлов..............................................................492
Произвольный доступ................................................................................................ 497
Определение состояния ввода-вывода................................................................ 500
Вопросы для самопроверки ................................................................................... 501
МОДУЛЬ 12. Исключения, шаблоны и другие дополнительные темы .................................................................................................. 503
Обработка исключений.............................................................................................. 504
Основы обработки исключений.........................................................................504
Использование группы предложений са1сЬ................................................. 510
Улавливание всех исключений.........................................................................512
Задание исключений выбрасываемых функцией.......................................513
Вторичное выбрасывание исключения ......................................................... 515
Шаблоны........................................................................................................................ 517
Родовые функции ................................................................................................ 518
Функция с двумя родовыми типами.................................................................520
Явная перегрузка родовых функций .............................................................. 521
Родовые классы ...........................................................................................................523
Явные специализации класса ................................................................................. 526
Проект 12-1: Создание родового класса очереди ................................................ 527
Динамическое выделение памяти .............................................................................. 531
Инициализация выделенной памяти ................................................................... 534
Выделение памяти под массивы ............................................................................535
Выделение памяти под объекты ............................................................................536
Пространства имен ............................................................................................................ 540
Основы использования пространств имен ........................................................541
Предложение и в тд ..................................................................................................... 545
Безымянные пространства имен ............................................................................547
Пространство имен std .............................................................................................547
Статические члены классов ............................................................................................ 548
Статические переменные-члены............................................................................548
Статические функции-члены ................................................................................. 551
Динамическая идентификация тип о в(РГП )............................................................553
Операторы приведения типа .......................................................................................... 557
dynamic_cast................................................................................................................... 557
const_cast.........................................................................................................................559
s atic _ cast.........................................................................................................................559
reinterpret_cast ..............................................................................................................560
Что дальше? .......................................................................................................................... 560
Вопросы для самопроверки ..........................................................................................561
Приложение А. Ответы на Вопросы для самопроверки ...................................................563
Приложение В. Препроцессор ..............................................................................603
# define ...............................................................................................................................604
Макросы, подобные функциям ...............................................................................606
# error ................................................................................................................................. 608
# include ............................................................................................................................608
Директивы условной компиляции................................................................................. 609
#if, #else, #elif и # end if ................................................................................................609
#ifdef и # ifn def.................................................................................................................612
# u n d e f ...............................................................................................................................613
Иcпoльзoвaниe defined ..............................................................................................................613
# line .......................................................................................................................................... 614
#pragma ................................................................................................................................. 614
Операторы препроцессора # и # # ............................................................................... 614
Предопределенные макросы.......................................................................................... 616
Приложение С. Работа со старым компилятором С++ ......................................................617
Два простых изменения .............................................................................................619
Предметный указатель ..............................................................................................621
Книга известного американского специалиста и популяризатора языков программирования, посвященная основам языка С++. Начиная с таких базовых понятий языка, как типы данных, массивы, строки, указатели и функции, книга охватывает также важнейшие элементы объёктно-ориентированного программирования - классы и объекты, наследование, виртуальные функции, потоки ввода вывода, исключения и шаблоны. Каждый раздел сопровождается простыми и наглядными примерами, позволяющими получить практические навыки современного программирования. Книга предназначена для приступающих к изучению языка С++ -одного из самых универсальных и распространенных на сегодня языков программирования.