Как программировать на С++, 5-е издание
Год издания: 2008
Автор: Дейтел Х. М., Дейтел П. Дж.
Переводчик: Перевод с английского под редакцией Тимофеева В.В.
Издательство: Бином-Пресс
ISBN: 978-5-9518-0224-8
Язык: Русский
Формат: PDF
Качество: Отсканированные страницы + слой распознанного текста
Количество страниц: 1455
Описание: Книга (оригинальное название «С++ How to Program, Fifth Edition») является одним из самых популярных в мире учебников по С++. Характерной ее особенностью является «раннее введение» в классы и объекты, т. е. начала объектно-ориентированного программирования вводятся уже в 3-й главе, без предварительного изложения унаследованных от языка С элементов процедурного и структурного программирования, как это делается в большинстве курсов по С++. Большое внимание уделяется объектно-ориентированному проектированию (ООО) программных систем с помощью графического языка UML 2, чему посвящен ряд факультативных разделов, описывающих последовательную разработку большого учебного проекта.
В текст книги включена масса примеров «Живого кода» - подробно комментированных работающих программ с образцами их запуска, а также несколько подробно разбираемых интересных примеров. В конце каждой главы имеется обширный набор контрольных вопросов и упражнений.
Книга может служить учебным пособием для начальных курсов по С++, а также будет полезна широкому кругу как начинающих программистов, так и более опытных, не работавших прежде с С++.
Оглавление
Предисnовие
Гnава 1 . Введение в компьютеры. lnternet и World Wide Web
1 . 1 . Введение
1 . 2 . Что такое компьютер?
1 . 3 . Организация компьютера
1 . 4 . Первые операционные системы
1 . 5 . Модели обработки данных: персональная, распределенная и клиент/сервер
1 . 6 . Internet и World Wide Web
1 . 7 . Машинные языки, языки ассемблера и языки высокого уровня
1 . 8 . История С и С++
1 . 9 . Стандартная библиотека С++
1 . 1 0 . История языка Java
1 . 1 1 . FORTRAN, COBOL, Pascal и Ada
1 . 1 2 . BASIC , Visual Basic , Visual С++, С# и .NET
1 . 1 3 . Ключевая тенденция в программировании: объектная технология
1 . 1 4 . Типичная среда разработки С++
1 . 1 5 . Замечания о С++ и этой книге
1 . 1 6 . Тестовый запуск приложения на С++
1 . 1 7 . Конструирование программного обеспечения . Введение в объектную технологию и UML (обязательный раздел)
1 . 1 8 . Заключение
1 . 1 9 . Ресурсы Web
Глава 2. Введение в программирование на С++
2 . 1 . Введение
2 . 2 . Первая программа на С++: печать строки текста
2 . 3 . Модификация нашей первой программы
2 . 4 . Другая программа на С++: сложение целых чисел
2 . 5 . Организация памяти
2 . 6 . Арифметика
2 . 7 . Принятие решений: операции равенства и отношений
2 . 8 . Конструирование программного обеспечения. Исследование требований к АТМ (необязательный раздел)
2 . 9 . Заключение
Глава 3. Введение в классы и объекты
3 . 1 . Введение
3 . 2 . Классы , объекты, элемент-функции и элементы данных
3 . 3 . Обзор примеров главы
3 . 4 . Определение класса с элемент-функцией
3 . 5 . Определение элемент-функции с параметром
3 . 6 . Элементы данных, sеt-функции и gеt-функции
3 . 7. Инициализация объектов при помощи конструкторов
3 . 8 . Размещение класса в отдельном файле
3 . 9 . Отделение интерфейса от реализации
3 . 10. Подтверждение данных посредством sеt-функций
3 . 11. Конструирование программного обеспечения. Идентификация классов в спецификации требований к АТМ (необязательный раздел)
3 . 12 . Заключение
Глава 4. Управляющие операторы: часть 1
4 . 1 . Введение
4 . 2 . Алгоритмы
4 . 3 . Псевдокод
4 . 4 . Управляющие структуры
4 . 5 . Оператор выбора if
4 . 6 . Оператор выбора if . . . else
4 . 7. Оператор повторения while
4 . 8 . Формулирование алгоритмов: повторение, управляемое счетчиком
4 . 9 . Формулирование алгоритмов: повторение, управляемое контрольным значением
4 . 1 0 . Формулирование алгоритмов: вложенные управляющие операторы
4 . 1 1 . Операции присваивания
4 . 1 2 . Операции инкремента и декремента
4 . 1 3 . Конструирование программного обеспечения . Идентификация классовых атрибутов в системе АТМ (необязательный раздел)
4 . 1 4 . Заключение
Глава 5. Управляющие операторы: часть 11
5 . 1 . Введение
5 . 2 . Основы повторения, управляемого счетчиком
5 . 3 . Оператор повторения for
5 . 4 . Примеры операторов for
5 . 5 . Оператор повторения do ... while
5 . 6 . Оператор множественного выбора switch
5 . 7 . Операторы break и continue
5 . 8 . Логические операции
5 . 9 . Случайная подмена операции равенства (==) присваиванием ( = )
5 . 10. Структурное программирование: резюме
5 . 11. Конструирование программного обеспечения. Идентификация состояний объектов и деятельности в системе АТМ (необязательный раздел)
5 . 12. Заключение
Глава 6. Функции и введение в рекурсию
6 . 1 . Введение
6 . 2 . Компоненты программ на С++
6 . 3 . Функции математической библиотеки
6 . 4 . Определения функций с несколькими параметрами
6 . 5 . Прототипы функций и принудительное приведение аргументов
6 . 6 . Заголовочные файлы стандартной библиотеки С++
6 . 7. Пример: генерация случайных чисел
6 . 8 . Пример: азартная игра с использованием перечисления (enum)
6 . 9 . Классы памяти
6 . 1 0 . Правила для области действия
6 . 1 1 . Стек вызовов и активационные записи
6 . 1 2 . Функции с пустым списком параметров
6 . 1 3 . Встроенные функции
6 . 1 4 . Ссылки и ссылочные параметры
6 . 1 5 . Аргументы по умолчанию
6 . 1 6 . Унарная операция разрешения области действия
6 . 1 7. Перегрузка функций
6 . 1 8 . Шаблоны функций
6 . 1 9 . Рекурсия
6 . 2 0 . Пример рекурсии: числа Фибоначчи
6 . 2 1 . Рекурсия в сравнении с итерацией
6 . 2 2 . Конструирование программного обеспечения. Идентификация операций классов в системе АТМ (необязательный раздел)
6 . 2 3 . Заключение
Глава 7. Массивы и векторы
7 . 1 . Введение
7 . 2 . Массивы
7 . 3 . Объявление массивов
7 . 4 . Примеры с массивами
7 . 5 . Передача массивов функциям
7 . 6 . Пример: класс GradeBook с массивом для хранения оценок
7 . 7. Линейный поиск в массивах
7 . 8 . Сортировка массивов вставкой
7 . 9 . Многомерные массивы
7 . 1 0 . Пример : класс GradeBook с двумерным массивом
7 . 1 1 . Введение в шаблон класса vector стандартной библиотеки С++
7 . 1 2 . Конструирование программного обеспечения . Кооперация объектов в системе АТМ (необязательный раздел)
7 . 1 3 . Заключение
Глава 8. Указатели и строки-указатели
8 . 1 . Введение
8 . 2 . Объявление и инициализация переменных-указателей
8 . 3 . Операции указателей
8 . 4 . Передача аргументов по ссылке с помощью указателей
8 . 5 . Квалификатор const в применении к указателям
8 . 6 . Сортировка выборкой с передачей по ссылке
8 . 7 . Операции sizeof
8 . 8 . Выражения с указателями и арифметика указателей
8 . 9 . Взаимосвязь указателей и массивов
8 . 1 0 . Массивы указателей
8 . 1 1 . Пример : моделирование тасования и сдачи карт
8 . 1 2 . Указатели на функцию
8 . 1 3 . Введение в обработку строк-указателей
8 . 1 3 .1. Элементарные сведения о символах и строках
8 . 1 3 .2 . Функции обработки строк из библиотеки <cstring>
8 . 1 4 . Заключение
Глава 9. Классы: часть 1
9 . 1 . Введение
9 . 2 . Пример: класс Time
9 . 3 . Область действия класса и доступ к элементам класса
9 . 4 . Отделение интерфейса от реализации
9 . 5 . Функции доступа и сервисные функции
9 . 6 . Пример: класс Time . Конструкторы с аргументами по умолчанию
9 . 7 . Деструкторы
9 . 8 . Когда вызываются конструкторы и деструкторы
9 . 9 . Пример: класс Time . Скрытая ошибка - возвращение ссылки на закрытый элемент данных
9 . 10. Поэлементное присваивание по умолчанию
9 . 11. Утилизируемость программного обеспечения
9 . 12. Конструирование программного обеспечения. Начало программирования классов системы АТМ (необязательный раздел)
9 . 13. Заключение
Глава 10. Классы: часть 11
1 0 . 1 . Введение
1 0 . 2 . Константные объекты и константные элемент-функции
1 0 . 3 . Композиция : объекты в качестве элементов класса
1 0 . 4 . Дружественные функции и дружественные классы
1 0 . 5 . . Указатель this
10 . 6. Динамическое управление памятью с помощью операций new и delete
10 . 7. Статические элементы класса
10 . 8 . .Абстракция данных и сокрытие информации
10 . 8. 1. Пример: абстрактный тип данных - массив
10 . 8 .2. Пример: абстрактный тип данных - строка
10 . 8 .3. Пример: абстрактный тип данных - очередь
10 . 9 . :Классы-контейнеры и итераторы
10 . 10 . :Классы-посредники
10 . 11 . Заключение
Глава 11. Перегрузка·операций; объекты Array и String
11.1. Введение
11. 2 . Основы перегрузки операций
11. 3 . Ограничения на перегрузку операций
11. 4 . Функции-операции как элементы класса и как глобальные функции
11 . 5 . Перегрузка операций передачи в поток и извлечения из потока
11 . 6. Перегрузка одноместных операций
11 . 7. Перегрузка двухместных операций
11 . 8 . Пример : класс Array
11 . 9 . Преобразование типов
11 . 10 . Пример: класс String
11 . 11 . Перегрузка ++ и --
11 .12 . Пример : класс Date
11 .13 . Класс striпg стандартной библиотеки
11 .14. ехрliсit-конструкторы
11 .15 . Заключение
Глава 12. Объектно-ориентированное программирование: наследование
12 . 1 . Введение
12 . 2 . Базовые и производные классы
12 . 3 . Защищенные элементы
12 . 4 . Отношения между базовыми и производными классами
12. 4. 1. Создание и тестирование класса Commission Employee
12. 4. 2. Создание класса Base Plus Commission Employee без наследования
12. 4. 3. Создание иерархии наследования Commission Employee - Base Plus Commission Employee
12. 4. 4. Иерархия наследования Commission Employee - Base Plus Commission Employee с защищенными данными
12. 4. 5. Иерархия наследования Commission Employee - Base Plus Commission Employee с закрытыми данными
12 . 5 . :Конструкторы и деструкторы в производных классах
12 . 6 . Открытое , защищенное и закрытое наследование
12 . 7 . Наследование в конструировании программного обеспечения
12 . 8 . Заключение
Глава 13. Объектно-ориентированное программирование: полиморфизм
1 3 . 1 . Введение
1 3 . 2 . Примеры полиморфизма
1 3 . 3 . Отношения между объектами в иерархии наследования
1 3 . 3 .1. Вызов функций базового класса и з объектов производного класса
1 3 . 3 .2. Установка указателей производного класса на объекты базового класса
1 3 . 3 .3. Вызов элемент-функций производного класса через указатели базового класса
1 3 . 3 .4. Виртуальные функции
1 3 . 3 .5 . Сводка допустимых присваиваний объектов указателям базового и производного классов
1 3 . 4 . Поля типа и операторы switch
1 3 . 5 . Абстрактные классы и чисто виртуальные функции
1 3 . 6 . Пример. Система начисления заработной платы , использующая полиморфизм
13.6. 1. Создание абстрактного базового класса Employee
13.6.2. Создание конкретного производного класса Salaried Employee
13.6.3. Создание конкретного производного класса Hourly Employee.
13.6.4. Создание конкретного производного класса Commission Employee
13.6.5. Создание косвенного конкретного производного класса Base Plus Commission Employee
13.6.6. Демонстрация полиморфной обработки
1 3 . 7 . (Дополнительный раздел . ) Техническая сторона полиморфизма, виртуальных функций и динамического связывания
1 3 . 8 . Пример. Система начисления заработной платы, использующая полиморфизм и информацию о типе времени выполнения с нисходящими приведениями типа, dynamic_cast, typeid и type_info
1 3 . 9 . Виртуальные деструкторы
1 3 . 1 0 . Конструирование программного обеспечения . Введение наследования в систему АТМ (необязательный раздел)
1 3 . 1 1 . Заключение
Глава 14. Шаблоны
1 4 . 1 . Введение
1 4 . 2 . Шаблоны функций
1 4 . 3 . Перегрузка шаблонов функции
1 4 . 4 . Шаблоны классов
1 4 . 5 . Нетиповые параметры и типы по умолчанию для шаблонов класса
1 4 . 6 . Замечания о шаблонах и наследовании
1 4 . 7. Замечания о шаблонах и друзьях
1 4 . 8 . Замечания о шаблонах и статических элементах
1 4 . 9 . Заключение
Глава 15. Потоковый ввод/вывод
15. 1 . Введение
15. 2 . Потоки
15. 2. 1. Классические и стандартные потоки
15. 2.2. Заголовочные файлы библиотеки iostream
15. 2.3. Классы и объекты потокового ввода/вывода
15. 3 . Потоковый вывод
15. 3. 1. Вывод переменных типа char *
15. 3.2. Вывод символов с помощью элемент-функции put
15. 4 . Потоковый ввод
15. 4. 1. Элемент-функции get и getline
15. 4.2. Элемент-функции peek, putback и ignore класса istream
15. 4.3. Безопасный по типу ввод/вывод
15. 5 . Бесформатный ввод/вывод с помощью read , gcount и write
15. 6 . Введение в манипуляторы потоков
15. 6. 1. Основание целых чисел: dec, oct, hex и setbase
15. 6.2. Точность чисел с плавающей точкой (precision, setprecision)
15. 6.3. Ширина поля (setw, width)
15. 6.4. Определяемые пользователем манипуляторы выходного потока
15. 7. Состояния формата потока и потоковые манипуляторы
15. 7. 1. Конечные нули и десятичные точки (showpoint)
15. 7.2. Выравнивание (left, right, internal)
15. 7 .3 . Заполнение (fill, setfill)
15. 7.4. Основание целых чисел (dec, oct, hex, showbase)
15. 7.5. Числа с плавающей точкой: научная и фиксированная нотация (scientific, fixed)
15. 7.6. Управление верхним/нижним регистрами (uppercase)
15. 7.7. Спецификация булева формата (boolalpha)
15. 7.8 . Установка и сброс состояний формата с помощью элемент-функции flags
15. 8 . Состояния ошибки потоков
15. 9 . Привязка потока вывода к потоку ввода
15. 10 . Заключение
Глава 16 . Управление исключениями
1 6 . 1 . Введение
1 6 . 2 . Обзор управления исключениями
1 6 . 3 . Пример : обработка попытки деления на ноль
1 6 . 4 . Когда следует применять управление исключениями
1 6 . 5 . Перебрасывание исключений
1 6 . 6 . Спецификации исключений
1 6 . 7. Обработка непредусмотренных исключений
1 6 . 8 . Разматывание стека
1 6 . 9 . Конструкторы , деструкторы и управление исключениями
1 6 . 1 0 . Исключения и наследование
1 6 . 1 1 . Обработка отказов операции new
1 6 . 1 2 . Класс autoptr и динамическое выделение памяти
1 6 . 1 7. Иерархи.я исключений стандартной библиотеки
1 6 . 1 4 . Другие методы обработки ошибок
1 6 . 1 5 . Заключение
Глава 17 . Обработка файлов
1 7 . 1 . Введение
1 7 . 2 . Иерархи.я данных
1 7 . 3 . Файлы и потоки
1 7 . 4 . Создание последовательного файла
1 7 . 5 . Чтение данных из последовательного файла
1 7 . 6 . Обновление последовательных файлов
1 7 . 7 . Файлы произвольного доступа
1 7 . 8 . Создание файла произвольного доступа
1 7 . 9 . Произвольна.я запись данных в файл произвольного доступа
1 7 . 1 0 . Последовательное чтение из файла произвольного доступа
1 7 . 1 1 . Пример. Программа обработки транзакций
1 7 . 1 2 . Ввод/вывод объектов
1 7 . 1 3 . Заключение
Глава 18. Kлacc string и обработка строковых потоков
1 8 . 1 . Введение
1 8 . 2 . Присваивание и конкатенация строк
1 8 . 3 . Сравнение строк
1 8 . 4 . Подстроки
1 8 . 5 . Обмен строк
1 8 . 6 . Характеристики строки
1 8 . 7 . Поиск в строке подстрок и символов
1 8 . 8 . Замена символов в строке
1 8 . 9 . Вставка символов в строку
1 8 . 1 0 . Преобразование в строки-указатели С типа char *
1 8 . 1 1 . Итераторы
1 8 . 1 2 . Обработка строковых потоков
1 8 . 1 3 . Заключение
Глава 19. Поиск и сортировка
19.1. Введение
19.2. Алгоритмы поиска
19.2.1. Эффективность линейного поиска
19.2.2. Двоичный поиск
19.3. Алгоритмы сортировки
19.3.1. Эффективность сортировки выборкой
19.3.2. Эффективность сортировки вставкой
19.3.3. Сортировка слиянием (рекурсивная реализация)
19.4 . Заключение
Глава 20. Структуры данных
2 0 . 1 . Введение
2 0 . 2 . Автореферентные классы
2 0 . 3 . Динамическое распределение памяти и структуры данных
2 0 . 4 . Связанные списки
2 0 . 5 . Стеки
2 0 . 6 . Очереди
2 0 . 7. Деревья
2 0 . 8 . Заключение
Глава 21. Биты, символы, строки С и структуры .
2 1 . 1 . Введение
2 1 . 2 . Определение структур
2 1 . 3 . Инициализация структур
2 1 . 4 . Использование структур с функциями
2 1 . 5 . typedef
2 1 . 6 . Пример. Высокоэффективное моделирование тасования и сдачи карт
2 1 . 7 . Поразрядные операции
2 1 . 8 . Битовые поля
2 1 . 9 . Библиотека обработки символов
2 1 . 1 0 . Функции преобразования строк-указателей
2 1 . 1 1 . Функции поиска и з библиотеки обработки строк -указателей
2 1 . 1 2 . Функции управления памятью из библиотеки обработки строк-указателей
2 1 . 1 3 . Заключение
Глава 22. Библиотека стандартных шаблонов (STL)
22. 1 . Введение в Библиотеку стандартных шаблонов (STL)
22. 1. 1. Введение в контейнеры
22. 1.2. Введение в итераторы
22. 1.3. Введение в алгоритмы
22. 2 . Контейнеры последовательностей
22.2. 1. Контейнер последовательности vector
22.2.2. Контейнер последовательности list
22.2.3. Контейнер последовательности deque
22.3 . Ассоциативные контейнеры
22.3. 1. Ассоциативный контейнер multiset.
22.3.2. Ассоциативный контейнер set
22.3.3. Ассоциативный контейнер multimap
22.3.4. Ассоциативный контейнер map
22.4. Адаптеры контейнеров
22.4.1. Адаптер stack
22.4.2 . Адаптер queue
22.4.3. Адаптер priority_queue
22.5 . Алгоритмы
22.5. 1. fill, fill_n, generate и generate_n
22.5.2. equal, mismatch и lexicographical_compare
22.5.3. remove, remove_if, remove_copy и remove_copy_if
22.5.4. replace, replace_if, replace_copy и replace_copy_if
22.5.5. Математические алгоритмы
22.5.6. Элементарные алгоритмы поиска и сортировки
22.5. 7. swap, iter_swap и swap_ranges
22.5.8. copy_backward, merge, unique и reverse
22.5. 9. inplace_merge, unique_copy и reverse_copy
22.5. 10. Операции над множествами
22.5. 1 1. lower_bound, upper_bound и equal_range
22.5. 12. Кучевая сортировка
22.5. 13. min и max
22 .5. 14. Алгоритмы STL, не представленные в этой главе
2 2 . 6 . Класс Ьitset
2 2 . 7 . Функциональные объекты
2 2 . 8 . Заключение
2 2 . 9 . Ресурсы по STL в Internet и Web
Глава 23. Специальные вопросы
2 3 . 1 . Введение
2 3 . 2 . Операция const_cast
2 3 . 3 . Пространства имен
2 3 . 4 . Ключевые слова для операций
2 3 . 5 . Элементы класса со спецификатором mutahle
2 3 . 6 . 'Указатели на элементы класса ( . * и - >* )
2 3 . 7 . Сложное наследование
2 3 . 8 . Сложное наследование и виртуальные базовые классы
2 3. 9. Заключение
2 3. 10. Последние замечания
Приnожение А. Табnица старшинства и ассоциативности операций
Приnожение Б. Набор симвоnов ASCll
Приnожение В. Основные типы
Приnожение Г. Код, унаследованный от С
Г . 1 . Введение
Г . 2 . Переадресация ввода/вывода в системах UNIX/LINUX/Mac OS Х и Windows
Г . 3 . Списки аргументов переменной длины
Г . 4 . Аргументы командной строки
Г . 5 . Замечания о компиляции программ из нескольких исходных файлов
Г . 6 . Выход из программы с помощью exit и atexit
Г. 7 . Квалификатор типа volatile
Г. 8 . Суффиксы для целых констант и констант с плавающей точкой
Г. 9 . Обработка сигналов
Г. 1 0 . Динамическое распределение памяти с помощью calloc и realloc
Г. 1 1 . Безусловный переход: goto
Г. 1 2 . Объединения
Г. 1 3 . Спецификации компоновки
Г. 1 4 . Заключение
Приложение Д. Препроцессор
Д. 1 . Введение
Д. 2 . Директива препроцессора #include
Д. 3 . Директива #define: символические константы
Д. 4 . Директива #define: макросы
Д. 5 . Условная компиляция
Д. 6 . Директивы # error и #pragma
Д. 7. Операции # и # #
Д. 8 . Предопределенные символические константы
Д. 9 . Макрос подтверждения
Д. 10 . Заключение
Приложение Е. Код учебноrо примера АТМ
Е. 1 . Реализация проекта АТМ
Е. 2 . Класс АТМ
Е. 3 . Класс Screen
Е. 4 . Класс Keypad
Е. 5 . Класс CashDispenser
Е. 6 . Класс DepositSlot
Е. 7. Класс Account
Е. 8 . Класс BankDatabase
Е. 9 . Класс Transaction
Е. 1 0 . Класс Balancelnquiry
Е. 1 1 . Класс Withdrawal
Е. 1 2 . Класс Deposit
Е. 1 3 . Тестовая программа ATMCaseStudy.cpp
Е. 1 4 . Заключение
Приложение Ж. UML 2 . Дополнительные типы диаrрамм
Ж. 1 . Введение
Ж. 2 . Дополнительные типы диаграмм
Приложение 3. Ресурсы в lnternet и Web
З . 1 . Ресурсы
З . 2 . Учебные руководства
З . 3 . FAQ (часто задаваемые вопросы)
З . 4 . Visual С++
З . 5 . Группы новостей
З . 6 . Компиляторы и инструменты разработки
Литература
Предметный указатель