Название: C++ для начинающих. Самоучитель
Серия: Шаг за шагом
Издательство: ЭКОМ Паблишерз
Год: 2013
Страниц: 640
Формат: DJVU, PDF
Размер: 41 МБ
Книга известного американского специалиста и популяризатора языков программирования, посвященная основам языка С++. Начиная с таких базовых понятий языка> как типы данных, массивы, строки,указатели и функции, книга охватывает также важнейшие элементы объёктно-ориентированного программирования - классы и объекты, наследование,' виртуальные функции, потоки ввода--вывода, исключения и шаблоны. Каждый раздел сопровождается простыми и наглядными примерами, дозволяющими получить практические навыки современного программирования. Книга предназначена для приступающих к изучению языка С++ -одного из самых универсальных и распространенных на сегодня языков программирования.
Содержание:
Выходные данные 641
От переводчика 6
Предисловие 8
МОДУЛЬ 1. Основы C++ 13
Краткая история C++ 14
Язык С: Заря современной эры программирования 14
Потребность в C++ 15
C++ родился 17
Эволюция C++ 17
Как C++ соотносится с языками Java и C# 18
Объектно-ориентированное программирование 20
Инкапсуляция 21
Полиморфизм 22
Наследование 23
Первая простая программа 24
Ввод программы 25
Компиляция программы 25
Запуск программы 26
Первый программный пример строка за строкой 27
Обработка синтаксических ошибок 30
Вторая простая программа 31
Использование операторов 33
Ввод с клавиатуры 35
Некоторые дополнительные возможности вывода 37
Еще один тип данных 38
Проект 1 -1: Преобразование футов в метры 40
Два управляющих предложения 43
Предложение if 43
Цикл for 45
Использование программных блоков 46
Знак точки с запятой и позиционирование 48
Практика использования отступов 49
Проект 1-2: Создание таблицы преобразования футов в метры 50
Знакомимся с функциями 52
Библиотеки C++ 55
Ключевые слова C++ 55
Идентификаторы 56
Вопросы для самопроверки 57
МОДУЛЬ 2. Знакомимся с данными, типами и операторами . . 59
Почему так важны типы данных 60
Типы данных C++ 60
Целые числа 63
Символы 65
Типы данных с плавающей точкой 67
Булев тип данных 68
Тип 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
Предложение switch 104
Вложенные предложения switch 108
Проект 3-1: Начинаем строить справочную систему C++ 109
Цикл for 112
Некоторые варианты цикла for 114
Опущенные секции 115
Бесконечный цикл for 117
Цикл с отсутствующим телом 117
Объявление переменных управления циклом внутри цикла for 118
Цикл while 120
Цикл do-while 122
Проект 3-2: Усовершенствование справочной системы C++ 124
Использование break для выхода из цикла 128
Использование continue 130
Проект 3-3: Завершаем разработку справочной системы C++ 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
Использование предложения return 192
Возвращаемые значения 195
Использование функций в выражениях 197
Правила видимости 199
Локальная область видимости 199
Глобальная область видимости 205
Передача в функции указателей и массивов 208
Передача указателя 209
Передача массива 210
Передача строк 213
Возврат указателей 214
Функция main() 216
argc и argv: аргументы функции main() 216
Передача числовых аргументов командной строки 219
Прототипы функций 220
Заголовки содержат прототипы 222
Рекурсия 223
Проект 5-1: Быстрое упорядочение 227
Вопросы для самопроверки 231
МОДУЛЬ 6. Подробнее о функциях 233
Два подхода к передаче аргументов 234
Как C++ передает аргументы 234
Использование указателя для создания вызова по ссылке 236
Параметры-ссылки 238
Возврат ссылок 243
Независимые ссылочные переменные 246
Несколько ограничений при использовании ссылочных пере менных . . . 247
Перегрузка функций 247
Автоматическое преобразование типов и перегрузка 252
Проект 6-1: Создание перегруженных функций для вывода на экран 255
Аргументы функций с инициализацией по умолчанию 261
Аргументы с инициализацией по умолчанию или перегрузка? 263
Правильное использование аргументов с инициализацией по умолчанию 265
МОДУЛЬ 7. Подробнее о типах данных и операторах 271
Описатели const и volatile 272
const 272
volatile 274
Описатели классов памяти 275
auto 276
extern 276
Статические переменные 278
Регистровые переменные 282
Перечислимые типы 284
typedef 288
Побитовые операторы 289
Операторы И, ИЛИ, исключающее ИЛИ и НЕ 290
Операторы сдвига 295
Проект 7-1: Создание функций циклического побитового сдвига 298
Оператор? 303
Оператор-запятая 304
Множественное присваивание 306
Составное присваивание 306
Использование оператора 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: Расширение класса Vehicle 429
Создание многоуровневой иерархии классов 433
Наследование от нескольких базовых классов 436
Когда выполняются функции конструктора и деструктора 437
Указатели на производные классы 439
Ссылки на производные типы 441
Виртуальные функции и полиморфизм 441
Основы виртуальных функций 441
Виртуальные функции наследуются 444
Зачем нужны виртуальные функции? 446
Приложение виртуальных функций 447
МОДУЛЬ 11. C++ и система ввода-вывода 457
Старая и новая системы ввода-вывода 458
Потоки C++ 459
Предопределенные потоки C++ 460
Потоковые классы C++ 460
Перегрузка операторов ввода-вывода 462
Создание операторных функций вывода 462
Использование дружественных функций для перегрузки операторов вывода 464
Перегрузка операторов ввода 466
Форматированный ввод-вывод 468
Форматирование с помощью функций-членов ios 468
Использование манипуляторов ввода-вывода 475
Создание собственных манипуляторных функций 477
Файловый ввод-вывод 480
Открытие и закрытие файла 480
Чтение и запись текстовых файлов 483
Неформатированный и двоичный ввод-вывод 485
Чтение и запись блоков данных 487
Больше о функция ввода-вывода 489
Другие варианты get() 489
getline() 491
Обнаружение символа EOF 491
peek() и putback() 491
flush() 492
Проект 11-1: Утилита сравнения файлов 492
Произвольный доступ 497
Определение состояния ввода-вывода 500
Вопросы для самопроверки 501
МОДУЛЬ 12. Исключения, шаблоны и другие дополнительные темы 503
Обработка исключений 504
Основы обработки исключений 504
Использование группы предложений catch 510
Улавливание всех исключений 512
Задание исключений, выбрасываемых функцией 513
Вторичное выбрасывание исключения 515
Шаблоны 517
Родовые функции 518
Функция с двумя родовыми типами 520
Явная перегрузка родовых функций 521
Родовые классы 523
Явные специализации класса 526
Проект 12-1: Создание родового класса очереди 527
Динамическое выделение памяти 531
Инициализация выделенной памяти 534
Выделение памяти под массивы 535
Выделение памяти под объекты 536
Пространства имен 540
Основы использования пространств имен 541
Предложение using 545
Безымянные пространства имен 547
Пространство имен std 547
Статические члены классов 548
Статические переменные-члены 548
Статические функции-члены 551
Динамическая идентификация типов (RTTI) 553
Операторы приведения типа 557
dynamic_cast 557
const_cast 559
static_cast 559
reinterpret_cast 560
Что дальше? 560
Вопросы для самопроверки 561
Приложение А. Ответы на Вопросы для самопроверки 563
Приложение В. Препроцессор 603
#define 604
Макросы, подобные функциям 606
#еггог 608
#include 608
Директивы условной компиляции 609
#if, #else, #elif и #endif 609
#ifdef и #ifndef 612
#undef 613
Использование defined 613
#line 614
#pragma 614
Операторы препроцессора # и ## 614
Предопределенные макросы 616
Приложение С. Работа со старым компилятором C++ 617
Два простых изменения 619
Предметный указатель 621
От переводчика 6
Предисловие 8
МОДУЛЬ 1. Основы C++ 13
Краткая история C++ 14
Язык С: Заря современной эры программирования 14
Потребность в C++ 15
C++ родился 17
Эволюция C++ 17
Как C++ соотносится с языками Java и C# 18
Объектно-ориентированное программирование 20
Инкапсуляция 21
Полиморфизм 22
Наследование 23
Первая простая программа 24
Ввод программы 25
Компиляция программы 25
Запуск программы 26
Первый программный пример строка за строкой 27
Обработка синтаксических ошибок 30
Вторая простая программа 31
Использование операторов 33
Ввод с клавиатуры 35
Некоторые дополнительные возможности вывода 37
Еще один тип данных 38
Проект 1 -1: Преобразование футов в метры 40
Два управляющих предложения 43
Предложение if 43
Цикл for 45
Использование программных блоков 46
Знак точки с запятой и позиционирование 48
Практика использования отступов 49
Проект 1-2: Создание таблицы преобразования футов в метры 50
Знакомимся с функциями 52
Библиотеки C++ 55
Ключевые слова C++ 55
Идентификаторы 56
Вопросы для самопроверки 57
МОДУЛЬ 2. Знакомимся с данными, типами и операторами . . 59
Почему так важны типы данных 60
Типы данных C++ 60
Целые числа 63
Символы 65
Типы данных с плавающей точкой 67
Булев тип данных 68
Тип 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
Предложение switch 104
Вложенные предложения switch 108
Проект 3-1: Начинаем строить справочную систему C++ 109
Цикл for 112
Некоторые варианты цикла for 114
Опущенные секции 115
Бесконечный цикл for 117
Цикл с отсутствующим телом 117
Объявление переменных управления циклом внутри цикла for 118
Цикл while 120
Цикл do-while 122
Проект 3-2: Усовершенствование справочной системы C++ 124
Использование break для выхода из цикла 128
Использование continue 130
Проект 3-3: Завершаем разработку справочной системы C++ 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
Использование предложения return 192
Возвращаемые значения 195
Использование функций в выражениях 197
Правила видимости 199
Локальная область видимости 199
Глобальная область видимости 205
Передача в функции указателей и массивов 208
Передача указателя 209
Передача массива 210
Передача строк 213
Возврат указателей 214
Функция main() 216
argc и argv: аргументы функции main() 216
Передача числовых аргументов командной строки 219
Прототипы функций 220
Заголовки содержат прототипы 222
Рекурсия 223
Проект 5-1: Быстрое упорядочение 227
Вопросы для самопроверки 231
МОДУЛЬ 6. Подробнее о функциях 233
Два подхода к передаче аргументов 234
Как C++ передает аргументы 234
Использование указателя для создания вызова по ссылке 236
Параметры-ссылки 238
Возврат ссылок 243
Независимые ссылочные переменные 246
Несколько ограничений при использовании ссылочных пере менных . . . 247
Перегрузка функций 247
Автоматическое преобразование типов и перегрузка 252
Проект 6-1: Создание перегруженных функций для вывода на экран 255
Аргументы функций с инициализацией по умолчанию 261
Аргументы с инициализацией по умолчанию или перегрузка? 263
Правильное использование аргументов с инициализацией по умолчанию 265
МОДУЛЬ 7. Подробнее о типах данных и операторах 271
Описатели const и volatile 272
const 272
volatile 274
Описатели классов памяти 275
auto 276
extern 276
Статические переменные 278
Регистровые переменные 282
Перечислимые типы 284
typedef 288
Побитовые операторы 289
Операторы И, ИЛИ, исключающее ИЛИ и НЕ 290
Операторы сдвига 295
Проект 7-1: Создание функций циклического побитового сдвига 298
Оператор? 303
Оператор-запятая 304
Множественное присваивание 306
Составное присваивание 306
Использование оператора 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: Расширение класса Vehicle 429
Создание многоуровневой иерархии классов 433
Наследование от нескольких базовых классов 436
Когда выполняются функции конструктора и деструктора 437
Указатели на производные классы 439
Ссылки на производные типы 441
Виртуальные функции и полиморфизм 441
Основы виртуальных функций 441
Виртуальные функции наследуются 444
Зачем нужны виртуальные функции? 446
Приложение виртуальных функций 447
МОДУЛЬ 11. C++ и система ввода-вывода 457
Старая и новая системы ввода-вывода 458
Потоки C++ 459
Предопределенные потоки C++ 460
Потоковые классы C++ 460
Перегрузка операторов ввода-вывода 462
Создание операторных функций вывода 462
Использование дружественных функций для перегрузки операторов вывода 464
Перегрузка операторов ввода 466
Форматированный ввод-вывод 468
Форматирование с помощью функций-членов ios 468
Использование манипуляторов ввода-вывода 475
Создание собственных манипуляторных функций 477
Файловый ввод-вывод 480
Открытие и закрытие файла 480
Чтение и запись текстовых файлов 483
Неформатированный и двоичный ввод-вывод 485
Чтение и запись блоков данных 487
Больше о функция ввода-вывода 489
Другие варианты get() 489
getline() 491
Обнаружение символа EOF 491
peek() и putback() 491
flush() 492
Проект 11-1: Утилита сравнения файлов 492
Произвольный доступ 497
Определение состояния ввода-вывода 500
Вопросы для самопроверки 501
МОДУЛЬ 12. Исключения, шаблоны и другие дополнительные темы 503
Обработка исключений 504
Основы обработки исключений 504
Использование группы предложений catch 510
Улавливание всех исключений 512
Задание исключений, выбрасываемых функцией 513
Вторичное выбрасывание исключения 515
Шаблоны 517
Родовые функции 518
Функция с двумя родовыми типами 520
Явная перегрузка родовых функций 521
Родовые классы 523
Явные специализации класса 526
Проект 12-1: Создание родового класса очереди 527
Динамическое выделение памяти 531
Инициализация выделенной памяти 534
Выделение памяти под массивы 535
Выделение памяти под объекты 536
Пространства имен 540
Основы использования пространств имен 541
Предложение using 545
Безымянные пространства имен 547
Пространство имен std 547
Статические члены классов 548
Статические переменные-члены 548
Статические функции-члены 551
Динамическая идентификация типов (RTTI) 553
Операторы приведения типа 557
dynamic_cast 557
const_cast 559
static_cast 559
reinterpret_cast 560
Что дальше? 560
Вопросы для самопроверки 561
Приложение А. Ответы на Вопросы для самопроверки 563
Приложение В. Препроцессор 603
#define 604
Макросы, подобные функциям 606
#еггог 608
#include 608
Директивы условной компиляции 609
#if, #else, #elif и #endif 609
#ifdef и #ifndef 612
#undef 613
Использование defined 613
#line 614
#pragma 614
Операторы препроцессора # и ## 614
Предопределенные макросы 616
Приложение С. Работа со старым компилятором C++ 617
Два простых изменения 619
Предметный указатель 621