Математика | ||||
Как программировать на C++-Харви Дейтел Издательство БИНОМ», 2001 г. — 1152 с. | ||||
Перевод с английского
Архангельского А.Я., Бочкаревой В.В., Ильина В.Н., Капустина О.А., Козлова А.В. Харви Дейтел, Пол Дейтел Как программировать на C++: Третье издание. Пер. с англ. —М.: ЗАО «Издательство БИНОМ», 2001 г. — 1152 с.: ил. Книга является руководством по программированию на языке C++. Это — одно из наиболее полных описаний последней версии C++, предназначенное как для начинающих программистов, так и для опытных пользователей, высоко оценивших предыдущее издание этой книги. В книге описаны две парадигмы программирования: процедурное программирование (поскольку C++ включает язык С) и объектно-ориентированное программирование. Авторы избрали стратегию представления С-подобного материала, включающего базисные типы данных, управляющие структуры, функции, массивы, указатели, строки и структуры, представили объектно-ориентированное программирование, посвятили самую большую главу стандартной библиотеке шаблонов (STL), шаблонным контейнерам, контейнерам последовательностей, ассоциативным контейнерам, адаптерам контейнеров, итераторам для прохождения шаблонных контейнеров. Основной особенностью нового издания является полностью реализованные практические примеры объектно-ориентированного проектирования с применением унифицированного языка моделирования — Unified Modeling Language™ (UML). Книга написана в виде учебника (с большим количеством методических приемов) * и может быть использована в этом качестве и преподавателями, и студентами. Все права защищены. Никакая часть этой книги не может быть воспроизведена в любой форме или любыми средствами, электронными или механическими, включая фотографирование, магнитную запись или иные средства копирования или сохранения информации без письменного разрешения издательства. Содержание Предисловие. . , ...................................... 15 Глава 1. Введение в компьютеры и программирование на C++ ....... . 41 1.1. Введение . . ........................... ... ...... .42 1.2. Что такое компьютер? .................... . . . . . . ... . 45 1.3. Организация компьютера...... ..'......... .'. ...... . . . .46 1.4. Эволюция операционных систем......... . . • • • • • • • • • • . * 46 1.5. Вычисления на персональном компьютере, распределенные вычисления и вычисления на платформе клиент/сервер ..... . . 47 1.6. Машинные языки, языки ассемблера и языки высокого уровня. . . 48 1.7. История Си C++.............•,...' i.................49 1.8. Стандартная библиотека C++........................ .51 1.9. Java и Java How to Program .................... . ..... 51 1.10. Другие языки высокого уровня . . ...................... 52 1.11. Структурное программирование........................ 53 1.12. Ключевые тенденции в программном обеспечении: объектная технология.............................. 53 1.13. Общее описание типичной среды программирования на C++ . ... .56 1.14. Тенденции развития аппаратных средств ............... . . 58 1.15. История Internet.................... . .............. 59 1.16. История World Wide Web............................60 .17. Общие замечания о C++, и об этой книге..................61 .18. Введение в программирование на C++ ................... 62 .19. Простая программа: печать строки текста.. ................ 62 .20. Другая простая программа: сложение двух целых чисел.......66 .21. Концепции памяти ..........:..................... 70 1.22. Арифметика................ . . ................... 71 1.23. Принятие решений: операции проверки на равенство и отношения................'............ 75 1.24. Размышления об объектах............................ 79 Глава 2. Управляющие структуры................................99 2.1. Введение. ......'..................,'.. . ,............. 100 2.2. Алгоритмы..................................... 101 2.3. Псевдокод. . . . . . ............................. . . . 101 2.4. Управляющие структуры.......................... ,102 2.5. Структура выбора if (ЕСЛИ).........................104 2.6. Структура выбора if/else (ЕСЛИ—ИНАЧЕ)............ ... 106 2.7. Структура повторения while (ПОКА) . . . ................110 2.8. Разработка алгоритмов: учебный пример 1 (повторение, управляемое счетчиком). .................. 112 2.9. Нисходящая разработка алгоритмов с пошаговой J детализацией: учебный пример 2 (повторение, управляемое меткой) . . . . . . . ..............115 2.10. Нисходящая разработка алгоритмов с пошаговой детализацией: учебный пример 3 (вложенные управляющие структуры) .................. 122 2.11. Операции присваивания........................... .126 2.12. Операции инкремента и декремента . . ,................. 127 2.13. Основы повторения, управляемого счетчиком..............129 2.14. Структура повторения for (ЦИКЛ)..................... 132 2.15. Пример использования структуры for................... 136 2.16. Структура множественного выбора switch................141 2.17. Структура повторения do/while..........., . . . .........147 2.18. Операторы break и continue......................... 149 2.19. Логические операции..............................151 2.20. Ошибки случайной подмены операций проверки равенства (==) и присваивания (=) . . ............154 2.21. Заключение по1 структурному программированию.......... 156 2.22. Размышления об объектах: идентификация классов задачи. . . . 161 Глава 3. Функции. . . ..................................195 , 3.1. Введение........................................196 3.2. Программные компоненты в C++.,.................... 197 3.3. Математические библиотечные функции................. 198 3.4. Функции . . . ................: ................. . 199 3.5. Определения функций.............................200 3.6. Прототипы функций ..............................204 3.7. ' Заголовочные файлы............................. . 207 3.8. Генерация случайных чисел-. ........................ 209 3.9. Пример: азартная игра............................. 214 3.10. Классы памяти................................. . 217 3.11. .Правила, определяющие область действия. . ...............220 3.12. Рекурсия................ . . ....................224 3.13. Пример использования рекурсии: последовательность чисел Фибоначчи.................. .227 3.14. Рекурсии или итерации . . .............. ..............230 3.15. Функции без параметров............................232 3.16. Встраиваемые функция............................ 234 3.17. Ссылки и ссылочные параметры...................... 235 3.18. Аргументы по умолчанию....... . .......... . . .......239 3.19. Унарная операция разрешения области действия .............241 3.20. Перегрузка функций.............................. 242 3.21. Шаблоны функции............................... .244 3.22. Размышления об объектах: идентификация атрибутов класса . . . 247 Глава 4. Массивы..................................... 277 4.1. Введение. . ................................ . . .... 278 4.2. Массивы................................... ... .278 4.3. Объявление массивов..............................280 4.4. Примеры использования массивов...................... 281 4.5. Передача массивов в функции......................... 295 4.6. Сортировка массивов............................. .300 4.7. Учебный пример: вычисление среднего значения, медианы и моды с использованием массивов .............. 302 4.8. Поиск в массивах: последовательный поиск И бинарный поиск . . .306 4.9. Многомерные массивы............................. 311 4.10. Размышления об объектах: идентификация операций класса. . . 317 Глава 5. Указатели и строки......................... Л ... 341 5.1. Введение....................................... 342 5.2. Объявления и инициализация переменных-указателей,. ...... 343 5.3. Операции над указателями.......................... 344 5.4. Вызов функций по ссылке........................... 347 5.5. Использование спецификатора const с указателями . ...... ..349 5.6. Пузырьковая сортировка, использующая вызов по ссылке. . . . . 357 5.7. Выражения и арифметические действия с указателями. . . . . . . 363 5.8. Взаимосвязи между указателями и массивами............ .365 5.9. Массивы указателей.............................. .370 5.10. Учебный пример: моделирование тасования и раздачи карт.... 370 5.11. Указатели на функции............................. 375 5.12. Введение в обработку символов и строк. ............... . .380 5.12.1. Основы теории символов и строк ...................... 380 5.12.2. Функции работы со строками из библиотеки обработки строк. . .382 5.13. Размышления об объектах: взаимодействие между объектами . . 389 Глава 6. Классы и абстрагирование данных ..:................423 6.1. Введение....................................... 424 6.2. Определения структур . . . ..........................425 • 6.3. Доступ к элементам структуры ............... ..-........426 6.4. Реализация определенного пользователем типа Time с помощью struct................................. 427 6.5. Реализация абстрактного типа данных Time с помощью class . . . 429 6.6. Область действия класса и доступ к членам класса .......... 436 6.7. Отделение интерфейса от реализации................... 437 6.8. Управление доступом к членам класса . .................441 6.9. Функции доступа и обслуживающие функции-утилиты ...... 444 6.10. Инициализация объектов класса: конструкторы . . .........447 6.11. Использование конструкторов с аргументами по умолчанию . . . 448 6.12. Использование деструкторов ......................... 452 6.13. Когда вызываются конструкторы и деструкторы ........... 453 6.14. Использование данных-членов и функций-членов...... ... . .456 6.15. Возвращение ссылки на закрытые данные-члены.......... .461 6.16. Присваивание побитовым копированием по умолчанию ...... 463 6.17. Повторное использование программного обеспечения .......,.465 6.18. Размышления об объектах: программирование классов ппа ЪЯЛПАТГЮ imAwa Глава 7. Классы: часть II................................ 487 7.1. Введение....................................... 488 7.2. Константные объекты и функции-члены.................488 7.3. Композиция: объекты как члены классов................ 497 7.4. Дружественные функции и дружественные классы. ......... 502 7.5. Использование указателя this........................505 7.6. Динамическое распределение памяти с помощью операций new и delete.............................510 7.7. Статические члены класса...........................511 7.8. Абстракция данных и скрытие информации..............516 7.8.1. Пример: абстрактный тип данных «массив».............. . 617 7.8.2. Пример: абстрактный тип данных «строка»................518 7.8.3. Пример: абстрактный тип данных «очередь»...............519 7.9. Классы-контейнеры и классы-итераторы................. 519 7.10. Proxy-классы . . .................................520 7.11. Размышления об объектах: программирование классов для модели лифта................................522 Глава 8. Перегрузка операций................ . ...........555 8.1. Введение.......................................556 8.2. Основы перегрузки операций. ........................ 557 8.3. Ограничения на перегрузку операций................... 558 8.4. Функции-операции как члены класса и как дружественные функции ...,.;,•.......•.........560 8.5. Перегрузка операций «Поместить в поток» и «взять из потока» . . . 561 8.6. Перегрузка унарных операций........................564 8.7. Перегрузка бинарных операций....................... 565 8.8. Учебный пример: класс Array.........../............ 565 8.9. Преобразования типов-.............................. 576 8.10. Учебный пример: класс String. . ......................577 8.11. Перегрузка ++ и —............................... 588 8.12. Учебный пример: класс Date.......„................... 590 Глава 9. Наследование. . . . .............................605 9.1. Введение....................................... 606 9.2. . Наследование: базовые классы и производные классы........608 9.3. Защищенные члены класса . .................... ..... 610 9.4. Приведение типов указателей базовых классов к указателям производных классов....................610 9.5. Использование функций-членов...................... . 616 9.6. Переопределение членов базового класса > в производном классе ............................. . 616 9.7. Открытые, защищенные и закрытые базовые классы......."...,. 620 • 9.8. Прямые и косвенные базовые классы...................621 9.9. Использование конструкторов и деструкторов в производных классах.............................622 9.10. Неявное преобразование объектов производных, классов в объекты базовых классов.......................... 625 9.11. Проектирование программного обеспечения 9.12. Композиция и наследование .....'.........-..- . . ....... 628 9.13. Отношения «использует А» и «знаетА»................. 629 9.14. Учебный пример: точка, круг, цилиндр.................. 629 9.15. Множественное наследование.......... . ... .......... 636 9.16. Размышления об объектах: включение наследования в модель лифта................................. .641 Глава 10. Виртуальные функции и полиморфизм................ 653 10.1. Введение....................................... 654 10.2. Поля типов и операторы switch....................... 654 10.3. Виртуальные функции . . ........... .'................ 655 10.4. Абстрактные базовые классы и конкретные классы ......... 656 10.5. Полиморфизм...................................657 10.6. Учебный пример: система расчета заработной платы. . ....... 659 10.7. Новые классы и динамическое связывание ...... .... .... .670 10.8. Виртуальные деструкторы................... . . . . , . . 670 10.9. Учебный пример: наследование интерфейса и реализации . .... 671 10.10. Внутренняя реализация полиморфизма, виртуальных функций и динамического связывания в С-Н-. •. . .679 Глава 11. Потоки ввода-вывода в C++......................... 687 11.1. Введение. . . ............... . . ................... 689 11.2. Потоки....................................... .690 11.2.1. Заголовочные файлы библиотеки iostream................690 11.2.2. Классы и объекты потоков ввода-вывода ................. 691 11.3. Вывод потоков...................................692 11.3.1. Операция «поместить в поток»........................ 693 11.3.2. Сцепление операций «поместить в'поток» и «взять из потока» . . . 695 11.3.3. Вывод переменных типа char*....... .................696 11.3.4. Вывод символов с помощью функции-члена put; сцепленные выводы...............................696 11.4. Ввод потоков.................................... 697 11.4.1. Операция «взять из потока»................... .......... 697 11.4.2. Функции-члены get и getline.........................700 11.4.3. Другие функции-члены класса istream (peek, putback, ignore) . .,.702 11.4.4. Сохранение типов данных при вводе-выводе. . ............. 703 11.5. Неформатированный ввод-вывод с использованием read, gcount и write........... . .................. .703 11.6. Манипуляторы потоков............................ . 704 11.6.1. Манипуляторы потоков dec, oct, hex и setbase, / задающие основание чисел........................... 704 11.6.2. Точность чисел с плавающей запятой (precision, setprecision) ... 705 11.6.3. Ширина поля (set*, width) ... . ... . . ... . . ... .... . . . . . . 705 11.6.4. Манипуляторы, определяемые пользователем.............708 11.7. Состояния формата потоков.......... .............. , . 708 11.7.1. Флаги состояний формата ................ . . . . . ..... . 708 11.7.2. Нулевые младшие разряды и десятичные точки (ios::showpoint) . ....................... .-.-. ....... 710 11.7.3. Выравнивание (ios::left, ios::right, ios::mternal). ........... 711 11.7.4. Заполнение (fill, setfill). ............................ 713 11.7.5. Основание системы счисления ' .'','.' (ios::dec, ios::oct, ios::hex, ios::showbase). ................ 715 Цена: 300руб. |
||||