|
- ⒶⒸДейтел Х.М... Как программировать на C++. (C++ how то programm) [Djv-Fax-19.4M] [Pdf-Fax-22.5M] Авторы: Харви Дейтел, Пол Дейтел (Н.М. Deiftel, P.J. Deitel). Перевод с английского: А.Я. Архангельский, B.B. Бочкарева, B.H. Ильин, O.A. Капустин, A.B. Козлов. Редактор: А.Я. Архангельский.
(Москва: ЗАО «Издательство БИНОМ», 1999) Скан: AAW, OCR, обработка, формат Djv-Fax, Pdf-Fax: pohorsky, 2022
- СОДЕРЖАНИЕ:
Предисловие (15). Введение в объектное ориентирование начинается с главы 1! (16). Об этой книге (16). Обзор книги (21). Глава 1. Введение в компьютеры и программирование на С++ (31). 1.1. Введение (32). 1.2. Что такое компьютер? (35). 1.3. Организация компьютера (36). 1.4. Эволюция операционных систем (37). 1.5. Персональные вычисления, распределенные вычисления и вычисления на платформе клиент/сервер (38). 1.6. Машинные языки, языки ассемблера и языки высокого уровня (38). 1.7. История С++ (40). 1.8. Библиотеки классов С++ и стандартная библиотека С (41). 1.9. Параллельный С++ (42). 1.10. Другие языки высокого уровня (43). 1.11. Структурное программирование (43). 1.12. Общее описание типичной среды программирования на С++ (44). 1.13. Общие замечания о С++ и об этой книге (47). 1.14. Введение в программирование на С++ (48). 1.15. Простая программа: печать строки текста (48). 1.16. Другая простая программа: сложение двух целых чисел (52). 1.17. Концепции памяти (56). 1.18. Арифметика (57). 1.19. Принятие решений: операции проверки на равенство и отношения (61). 1.20. Размышления об объектах (65). Резюме. Терминология. Типичные ошибки программирования. Хороший стиль программирования. Советы по повышению эффективности. Замечания по мобильности. Замечания по технике программирования. Упражнения для самопроверки. Ответы на упражнения для самопроверки. Упражнения. Глава 2. Управляющие структуры (87). 2.1. Введение (89). 2.2. Алгоритмы (89). 2.3. Псевдокод (89). 2.4. Управляющие структуры (90). 2.5. Структура выбора if (ЕСЛЙ) (93). 2.6. Структура выбора if/else (ЕСЛИ-ИНАЧЕ) (95). 2.7. Структура повторения while (ПОКА) (99). 2.8. Разработка алгоритмов: учебный пример 1 (повторение, управляемое счетчиком) (100). 2.9. Нисходящая разработка алгоритмов с пошаговой детализацией: учебный пример 2 (повторение, управляемое меткой) (102). 2.10. Нисходящая разработка алгоритмов с пошаговой детализацией: учебный пример 3 (вложенные управляющие структуры) * (109). 2.11. Операции присваивания (114). 2.12. Операции инкремента и декремента (115). 2.13. Основы повторения, управляемого счетчиком (117). 2.14. Структура повторения for (ЦИКЛ) (120). 2.15. Пример использования структуры for (124). 2.16. Структура множественного выбора switch (128). 2.17. Структура повторения do/while (134). 2.18. Операторы break и continue (136). 2.19. Логические операции (138). 2.20. Ошибки случайной подмены операций проверки равенства (==) и присваивания (=) (140). 2.21. Заключение по структурному программированию (143). 2.22. Размышления об объектах: идентификация объектов задачи (148). Резюме. Терминология. Типичные ошибки программирования. Хороший стиль программирования. Советы по повышению эффективности. Замечания по мобильности. Замечания по технике программирования. Упражнения для самопроверки. Ответы на упражнения для самопроверки. Упражнения. Глава 3. Функции (177). 3.1. Введение (178). 3.2. Программные модули в С++ (179). 3.3. Математические библиотечные функции (180). 3.4. Функции (181). 3.5. Определения функций (182). 3.6. Прототипы функций (187). 3.7. Заголовочные файлы (189). 3.8. Генерация случайных чисел (189). 3.9. Пример: азартная игра (195). 3.10. Классы памяти (198). 3.11. Правила, определяющие область действия (201). 3.12. Рекурсия (205). 3.13. Пример использования рекурсии: последовательность чисел Фибоначчи (208). 3.14. Рекурсии или итерации (211). 3.15. Функции с пустыми списками параметров (213). 3.16. Встраиваемые функции (214). 3.17. Ссылки и ссылочные параметры (216). 3.18. Аргументы по умолчанию (219). 3.19. Унарная операция разрешения области действия (221). 3.20. Перегрузка функций (222). 3.21. Шаблоны функции (223). 3.22. Размышления об объектах: идентификация атрибутов объектов (226). Резюме. Терминология. Типичные ошибки программирования. Хороший стиль программирования. Советы по повышению эффективности. Замечания по мобильности. Замечания по технике программирования. Упражнения для самопроверки. Ответы на упражнения для самопроверки. Упражнения. Глава 4. Массивы (259). 4.1. Введение (260). 4.2. Массивы (261). 4.3. Объявление массивов (263). 4.4. Примеры использования массивов (263). 4.5. Передача массивов в функции (276). 4.6. Сортировка массивов (280). 4.7. Учебный пример: вычисление среднего значения, медианы и моды с использованием массивов (282). 4.8. Поиск в массивах: линейный поиск и двоичный поиск (285). 4.9. Многомерные массивы (290). 4.10. Размышления об объектах: идентификация поведений объектов (297). Резюме. Терминология. Типичные ошибки программирования. Хороший стиль программирования. Советы по повышению эффективности. Замечания по мобильности. Замечания по технике программирования. Упражнения для самопроверки. Ответы на упражнения для самопроверки. Упражнения. Упражнения на рекурсию. Глава 5. Указатели и строки (321). 5.1. Введение (322). 5.2. Объявления и инициализация переменных указателей (323). 5.3. Операции над указателями (324). 5.4. Вызов функций по ссылке (326). 5.5. Использование спецификатора const с указателями (330). 5.6. Пузырьковая сортировка, использующая вызов по ссылке (336). 5.7. Выражения и арифметические действия с указателями (340). 5.8. Взаимосвязи между указателями и массивами (344). 5.9. Массивы указателей (348). 5.10. Учебный пример: моделирование тасования и раздачи карт (349). 5.11. Указатели на функции (354). 5.12. Введение в обработку символов и строк (358). 5.13. Размышления об объектах: взаимодействие объектов (367). Резюме. Терминология. Типичные ошибки программирования. Хороший стиль программирования. Советы по повышению эффективности. Замечания по мобильности. Замечания по технике программирования. Упражнения для самопроверки. Ответы на упражнения для самопроверки. Упражнения. Специальный раздел: построение вашего собственного компьютера. Дополнительные упражнения на указатели. Упражнения на работу со строками. Специальный раздел: упражнения повышенной сложности на работу со строками. Головоломный проект работы со строками. Глава 6. Классы и абстрагирование данных (405). 6.1. Введение (406). 6.2. Определения структур (408). 6.3. Доступ к элементам структуры (408). 6.4. Использование определенного пользователем типа Time с помощью Struct (409). 6.5. Использование абстрактного типа данных Time с помощью класса (411). 6.6. Область действия класс и доступ к элементам класса (418). 6.7. Отделение интерфейса от реализации (419). 6.8. Управление доступом к элементам (423). 6.9. Функции доступа и обслуживающие функции-утилиты (426). 6.10. Инициализация объектов класса: конструкторы (429). 6.11. Использование конструкторов с аргументами по умолчанию (429). 6.12. Использование деструкторов (433). 6.13. Когда вызываются конструкторы и деструкторы (433). 6.14. Использование данных-элементов и функций-элементов (436). 6.15. Тонкий момент: возвращение ссылки на закрытые данные-элементы (441). 6.16. Присваивание побитовым копированием по умолчанию (443). 6.17. Повторное использование программного обеспечения (445). 6.18. Размышления об объектах: программирование классов для моделирования лифта (445). Резюме. Терминология. Типичные ошибки программирования. Хороший стиль программирования. Советы по повышению эффективности. Замечания по технике программирования. Упражнения для самопроверки. Ответы на упражнения для самопроверки. Упражнения. Глава 7. Классы: часть II (459). 7.1. Введение (460). 7.2. Константные объекты и функции-элементы (461). 7.3. Композиция: классы как элементы других классов (467). 7.4. Дружественные функции и дружественные классы (471). 7.5. Использование указателя this (474). 7.6. Динамическое распределение памяти с помощью операций new и delete (479). 7.7. Статические элементы класса (480). 7.8. Абстракция данных и скрытие информации (485). 7.9. Классы контейнеры и итераторы (489). 7.10. Размышления об объектах: использование композиции и динамического управления объектом в модели лифта (489). Резюме. Терминология. Типичные ошибки программирования. Хороший стиль программирования. Советы по повышению эффективности. Замечания по технике программирования. Упражнения для самопроверки. Ответы на упражнения для самопроверки. Упражнения. Глава 8. Перегрузка операций (497). 8.1. Введение (498). 8.2. Основы перегрузки операций (499). 8.3. Ограничения на перегрузку операции (501). 8.4. Функции-операции как элементы класса и как дружественные функции (502). 8.5. Перегрузка операций поместить в поток и взять из потока (504). 8.6. Перегрузка унарных операций (506). 8.7. Перегрузка бинарных операций (507). 8.8. Учебный пример: класс массив (508). 8.9. Преобразования типов (519). 8.10. Учебный пример: класс строка (520). 8.11. Перегрузка ++ и (531). 8.12. Учебный пример: класс дата (532). Резюме. Терминология. Типичные ошибки программирования. Хороший стиль программирования. Советы по повышению эффективности. Замечания по технике программирования. Упражнения для самопроверки. Ответы на упражнения для самопроверки. Упражнения. Глава 9. Наследование (551). 9.1. Введение (552). 9.2. Базовые классы и производные классы (554). 9.3. Защищенные элементы (556). 9.4. Приведение типов указателей базовых классов к указателям производных классов (556). 9.5. Использование функций-элементов (562). 9.6. Переопределение элементов базового класса в производном классе (562). 9.7. Открытые, защищенные и закрытые базовые классы (566). 9.8. Прямые и косвенные базовые классы (568). 9.9. Использование конструкторов и деструкторов в производных классах (568). 9.10. Неявное преобразование объектов производных классов в объекты базовых классов (571). 9.11. Проектирование программного обеспечения с помощью наследования (573). 9.12. Композиция и наследование (574). 9.13. Отношения «использует А» и «знает А» (575). 9.14. Учебный пример: точка, круг, цилиндр (575). 9.15. Множественное наследование (582). Резюме. Терминология. Типичные ошибки программирования. Хороший стиль программирования. Советы по повышению эффективности. Замечания по технике программирования. Упражнения для самопроверки. Ответы на упражнения для самопроверки. Упражнения. Глава 10. Виртуальные функции и полиморфизм (595). 10.1. Введение (596). 10.2. Поля типов и операторы switch (597). 10.3. Виртуальные функции (597). 10.4. Абстрактные базовые классы и конкретные классы (599). 10.5. Полиморфизм (600). 10.6. Учебный пример: система расчета заработной платы (602). 10.7. Новые классы и динамическое связывание (612). 10.8. Виртуальные деструкторы (613). 10.9. Учебный пример: интерфейс наследования и его реализация (614). Резюме. Терминология. Типичные ошибки программирования. Хороший стиль программирования. Советы по повышению эффективности. Замечания по технике программирования. Упражнения для самопроверки. Ответы на упражнения для самопроверки. Упражнения. Глава 11. Потоки ввода-вывода в С++ (629). 11.1. Введение (631). 11.2. Потоки (632). 11.3. Вывод потоков (635). 11.4. Ввод потоков (639). 11.5. Неформатированный ввод-вывод с использованием read, gcount и write (645). 11.6. Манипуляторы потоков (646). 11.7. Состояния формата потоков (651). 11.8. Состояния ошибок потока (660). 11.9. Ввод-вывод определенных пользователем типов данных (662). 11.10. Связывание выходного потока с входным (664). Резюме. Терминология. Типичные ошибки программирования. Хороший стиль программирования. Советы по повышению эффективности. Замечания по технике программирования. Упражнения для самопроверки. Ответы на упражнения для самопроверки. Упражнения. Глава 12. Шаблоны (683). 12.1. Введение (684). 12.2. Шаблоны функций (685). 12.3. Перегрузка шаблонных функций (688). 12.4. Шаблоны классов (689). 12.5. Шаблоны классов и нетиповые параметры (694). 12.6. Шаблоны и наследование (695). 12.7. Шаблоны и друзья (695). 12.8. Шаблоны и статические элементы (696). Резюме. Терминология. Типичные ошибки программирования. Советы по повышению эффективности. Замечания по технике программирования. Упражнения для самопроверки. Ответы на упражнения для самопроверки. Упражнения. Глава 13. Обработка исключений (703). 13.1. Введение (704). 13.2. Когда должна использоваться обработка исключений (708). 13.3. Другие методы обработки ошибок (708). 13.4. Основы обработки исключений в С++ (709). 13.5. Простой пример обработки исключений: деление на нуль (710). 13.6. Блоки try (713). 13.7. Генерация исключений (713). 13.8. Перехват исключений (714). 13.9. Повторная генерация исключений (718). 13.10. Создание условного выражения (719). 13.11. Спецификация исключений (719). 13.12. Обработка непредусмотренных исключений (720). 13.13. Конструкторы, деструкторы и обработка исключений (721). 13.14. Исключения и наследование (722). Резюме. Терминология. Типичные ошибки программирования. Хороший стиль программирования. Советы по повышению эффективности. Замечания по мобильности. Замечания по технике программирования. Упражнения для самопроверки. Ответы на упражнения для самопроверки. Упражнения. Глава 14. Обработка файлов и ввод-вывод потоков строк (737). 14.1. Введение (738). 14.2. Иерархия данных (739). 14.3. Файлы и потоки (741). 14.1. Создание файла последовательного доступа (742). 14.5. Чтение данных из файла последовательного доступа (746). 14.6. Обновление файлов последовательного доступа (750). 14.7. Файлы произвольного доступа (751). 14.8. Создание файла произвольного доступа (753). 14.9. Произвольная запись данных в файл произвольного доступа (754). 14.10. Последовательное чтение данных из файла произвольного доступа (756). 14.11. Пример: программа обработки запросов (758). 14.12. Обработка потоков строк (763). 14.13. Ввод-вывод объектов (767). Резюме. Терминология. Типичные ошибки программирования. Хороший стиль программирования. Советы по повышению эффективности. Упражнения для самопроверки. Ответы на упражнения для самопроверки. Упражнения. Глава 15. Структуры данных (781). 15.1. Введение (782). 15.2. Классы с самоадресацией (783). 15.3. Динамическое выделение памяти (784). 15.4. Связные списки (786). 15.5. Стеки (799). 15.6. Очереди (804). 15.7. Деревья (807). Резюме. Терминология. Типичные ошибки программирования. Хороший стиль программирования. Советы по повышению эффективности. Замечания по мобильности. Упражнения для самопроверки. Ответы на упражнения для самопроверки. Упражнения. Специальный раздел: создание вашего собственного компилятора. Глава 16. Биты, символы, строки и структуры (847). 16.1. Введение (848). 16.2. Описание структур (849). 16.3. Инициализация структур (851). 16.4. Использование структур в функциях (852). 16.5. Создание синонимов (852). 16.6. Пример: эффективное моделирование тасования и раздачи карт (853). 16.7. Поразрядные операции (855). 16.8. Битовые поля (863). 16.9. Библиотека обработки символов (866). 16.10. Функции преобразования строк (872). 16.11. Функции поиска из библиотеки обработки строк (876). 16.12. Функции работы с памятью из библиотеки обработки строк (881). 16.13. Другие функции библиотеки обработки строк (884). Резюме. Терминология. Типичные ошибки программирования. Хороший стиль программирования. Советы по повышению эффективности. Замечания по мобильности. Упражнения для самопроверки. Ответы на упражнения для самопроверки. Упражнения. Глава 17. Препроцессор (903). 17.1. Введение (904). 17.2. Директива препроцессора #include (905). 17.3. Директива препроцессора #define: символические константы (905). 17.4. Директива препроцессора #define: макросы (906). 17.5. Условная компиляция (908). 17.6. Директивы препроцессора #error и #pragma (910). 17.7. Операции # и ## (910). 17.8. Нумерация строк (911). 17.9. Предопределенные символические константы (911). 17.10. Макрос assert (912). Резюме. Терминология. Типичные ошибки программирования. Хороший стиль программирования. Советы по повышению эффективности. Упражнения для самопроверки. Ответы на упражнения для самопроверки. Упражнения. Глава 18. Другие темы (919). 18.1. Введение (920). 18.2. Переназначение ввода-вывода в системах UNIX и DOS (921). 18.3. Список параметров переменной длины (922). 18.4. Использование аргументов командной строки (924). 18.5. Замечания по компиляции программ, состоящих из нескольких исходных файлов (924). 18.6. Завершение программы при помощи функций exit и atexit (927). 18.7. Спецификатор типа volatile (928). 18.8. Суффиксы целочисленных и вещественных констант (929). 18.9. Обработка сигналов (929). 18.10. Динамическое выделение памяти: функции calloc и realloc (932). 18.11. Безусловный переход: оператор goto (933). 18.12. Объединения (934). 18.13. Спецификации связывания (938). 18.14. Заключительные замечания (939). Резюме. Терминология. Типичные ошибки программирования. Советы по повышению эффективности. Замечания по мобильности. Замечания по технике программирования. Упражнения для самопроверки. Ответы на упражнения для самопроверки. Упражнения. Приложение А. Стандартная библиотека (949). Приложение Б. Таблица приоритета операций (988). Приложение В. Набор символов ASCII (989). Приложение Г. Системы счисления (991). Г.1. Введение (992). Г.2. Сокращенная запись двоичных чисел в восьмеричной и шестнадцатеричной системах счисления (995). Г.3. Преобразование восьмеричных и шестнадцатеричных чисел в двоичные (997). Г.4. Преобразование двоичных, восьмеричных и шестнадцатеричных чисел в десятичные (997). Г.5. Преобразование десятичных чисел в двоичные, восьмеричные и шестнадцатеричные (998). Г.6. Представление отрицательных двоичных чисел: дополнение до двух (999). Резюме. Терминология. Упражнения для самопроверки. Ответы на упражнения для самопроверки. Упражнения. Предметный указатель (1007).
ИЗ ИЗДАНИЯ: Книга предлагает полный курс изучения наиболее популярного и перспективного языка программирования - С++ и рассчитана как на начинающих, не владеющих никаким языком программирования, так и на опытных пользователей. Для начинающих - это полноценный курс, в котором изучается все, начиная с устройства компьютера и кончая новейшими достижениями С++: шаблонами функций и классов, обработкой исключений и т.п. Опытный программист может пропустить часть известного ему материала, но получит множество полезных сведений в остальных частях книги. Особое внимание авторы уделяют современным методикам разработки программного обеспечения: наследованию, полиморфизму, объектно-ориентированному проектированию и объектно-ориентированному программированию, не забывая и о классическом структурном программировании. Приведено множество полезных советов. Книга рассчитана на широкий круг читателей, от начинающих осваивать азы программирования до опытных разработчиков. |
|