- •Р. Лафоре
- •Глава 1. Общие сведения 32
- •Глава 3. Циклы и ветвления 92
- •Глава 4. Структуры 142
- •Глава 5. Функции 168
- •Глава 6. Объекты и классы 217
- •Глава 7. Массивы и строки 261
- •Глава 8. Перегрузка операций 312
- •Глава 10. Указатели 411
- •Глава 9. Наследование 361
- •Глава 11. Виртуальные функции 476
- •Глава 12. Потоки и файлы 536
- •Глава 13. Многофайловые программы 596
- •Глава 14. Шаблоны и исключения 640
- •Глава 15. Стандартная библиотека шаблонов (stl) 681
- •Глава 16. Разработка объектно-ориентированного по 752
- •Глава 1 «Общие сведения» включает список тем, касающихся uml, с указа- нием их расположения в книге.
- •Глава 1
- •Глава 2
- •Глава 3
- •If внутри циклов
- •If и else во вложенных ветвлениях
- •Глава 4
- •Глава 5 Функции
- •Глава 6
- •Глава 7
- •123456. Россия
- •123456. Россия
- •Глава 8
- •Глава 9
- •Глава 10 Указатели
- •Main() передает адрес переменной var в ptrd в centimize()
- •Centimize() использует этот адрес для доступа к var
- •Глава 11
- •Глава 12
- •Тип:менеджер Фамилия: Александров Номер:1111
- •Тип:Ученый Фамилия: Лебедев Номер:2222
- •Тип:рабочий Фамилия:Шевелев Номер:3333
- •Глава 13
- •Глава 14
- •Много объектов разных классов в памяти Рис. 14.2. Шаблон класса
- •Алгоритмы используют итераторы для работы с объектами контейнеров. Рис. 15.1. Контейнеры, алгоритмы и итераторы
- •Глава 16
- •Глава 1
- •Глава 2
- •Глава 3
- •Глава 4
- •Глава 5
- •Глава 6
- •Глава 7
- •Глава 8
- •Глава 9
- •Глава 10 Ответы на вопросы
- •Глава 11
- •Глава 12 Ответы на вопросы
- •Глава 13 Ответы на вопросы
- •Глава 14 Ответы на вопросы
- •Глава 15 Ответы на вопросы
- •Глава 16
Заголовочные
файлы 605
Пространства
имен 609
Класс
сверхбольших чисел 613
Числа
как строки 613
Описатель
класса 614
Методы 615
Прикладная
программа 617
Моделирование
высотного лифта 619
Работа
программы ELEV 620
Проектирование
системы 621
Листинг
программы ELEV 623
Диаграмма
состояний для программы ELEV 634
Резюме 635
Вопросы 636
Проекты 638
Шаблоны
функций 640
Шаблон
простой функции 642
Шаблоны
функций с несколькими аргументами 644
Шаблоны
классов 647
Контекстозависимое
имя класса 651
Создание
класса связных списков с помощью
шаблонов 653
Хранение
пользовательских типов 655
UML
и
шаблоны 658
Исключения 659
Для
чего нужны исключения 660
Синтаксис
исключений 661
Простой
пример исключения 662
Многократные
исключения 666
Исключения
и класс Distance 668
Исключения
с аргументами 670
Класс
bad_alloc 673
Размышления
об исключениях 674
Резюме 675
Вопросы 676
Упражнения 678
Введение
в STL 682
Контейнеры 682
Алгоритмы 687
Итераторы 688
Возможные
проблемы с STL 689
Алгоритмы 690
Алгоритм
find() 690
Алгоритм
count() 691
Алгоритм
sort() 692
Алгоритм
search() 692Глава 14. Шаблоны и исключения 640
Глава 15. Стандартная библиотека шаблонов (stl) 681
Алгоритм
merge() 693
функциональные
объекты 694
Пользовательские
функции вместо функциональных
объектов 695
Добавление
_if
к
аргументам 696
Алгоритм
for_each() 697
Алгоритм
transform() 697
Последовательные
контейнеры 698
Векторы 699
Списки 702
Итераторы 706
Итераторы
как интеллектуальные указатели 706
Итераторы
в качестве интерфейса 708
Соответствие
алгоритмов контейнерам 710
Работа
с итераторами 713
Специализированные
итераторы 717
Адаптеры
итераторов 717
Потоковые
итераторы 720
Ассоциативные
контейнеры 724
Множества
и мультимножества 725
Отображения
и мультиотображения 729
Ассоциативный
массив 730
Хранение
пользовательских объектов 731
Множество
объектов person 732
Список
объектов класса person 735
функциональные
объекты 738
Предопределенные
функциональные объекты 739
Создание
собственных функциональных объектов 741
функциональные
объекты и поведение контейнеров 746
Резюме 746
Вопросы 747
Упражнения 749
Эволюция
процесса создания программного
обеспечения 752
Процесс
просиживания штанов 753
Каскадный
процесс 753
Объектно-ориентированное
программирование 753
Современные
подходы 754
Моделирование
вариантов использования 755
Действующие
субъекты 755
Варианты
использования 756
Сценарии 756
Диаграммы
вариантов использования 757
Описания
вариантов использования 758
От
вариантов использования к классам 758
Предметная
область программирования 759
Рукописные
формы 760
Допущения 762
Программа
LANDLORD:
стадия
развития 762
Действующие
субъекты 762Глава 16. Разработка объектно-ориентированного по 752
Варианты
использования 762
Описание
вариантов использования 763
Сценарии 765
Диаграммы
действий UML 765
От
вариантов использования к классам 766
Список
существительных 766
Уточнение
списка 767
Определение
атрибутов 768
От
глаголов к сообщениям 768
Диаграмма
классов 770
Диаграммы
последовательностей 770
Написание
кода 774
Заголовочный
файл 775
Исходные
.cpp файлы 780
Вынужденные
упрощения 789
Взаимодействие
с программой 789
Заключение 791
Резюме 791
Вопросы 792
Проекты 794
Приложение
А. Таблица ASCII 796
Приложение
Б. Таблица приоритетов операций C++ 803
Таблица
приоритетов операций 803
Зарезервированные
слова 803
Приложение
В. Microsoft
Visual
C++ 806
Элементы
экрана 806
Однофайловые
программы 807
Компоновка
существующего файла 807
Создание
нового файла 808
Ошибки 808
Информация
о типах в процессе исполнения (RTTI) 808
Многофайловые
программы 809
Проекты
и рабочие области 809
Работа
над проектом 809
Сохранение,
закрытие и открытие проектов 810
Компиляция
и компоновка 811
Программы
с консольной графикой 811
Отладка
программ 811
Пошаговая
трассировка 812
Просмотр
переменных 812
Пошаговая
трассировка функций 812
Точки
останова 813
Приложение
Г. Borland
C++
Builder 814
Запуск
примеров в C++
Builder 815
Очистка
экрана 815
Создание
нового проекта 815
Задание
имени и сохранение проекта 817
Работа
с существующими файлами 817
Компиляция,
связывание и запуск программ 818
Запуск
программы в C++
Builder 818
Запуск
программы в MS
DOS 818
Предварительно
скомпилированные заголовочные файлы 818
Закрытие
и открытие проектов 818
Добавление
заголовочного файла к проекту 819
Создание
нового заголовочного файла 819
Редактирование
заголовочного файла 819
Определение
местонахождения заголовочного файла 819
Проекты
с несколькими исходными файлами 820
Создание
дополнительных исходных файлов 820
Добавление
существующих исходных файлов 820
Менеджер
проектов 821
Программы
с консольной графикой 821
Отладка 822
Пошаговый
прогон 822
Просмотр
переменных 822
Пошаговая
трассировка функций 822
Точки
останова 823
Приложение
Д. Упрощенный вариант консольной
графики 824
Использование
подпрограмм библиотеки консольной
графики 825
Функции
библиотеки консольной графики 825
Реализация
функций консольной графики 827
Компиляторы
Microsoft 827
Компиляторы
Borland 828
Листинги
исходных кодов 828
Приложение
Е. Алгоритмы и методы STL 836
Алгоритмы 836
Методы 843
Итераторы 845
Приложение
Ж. Ответы и решения 847
Глава
1 847
Глава
2 847
Глава
3 849
Глава
4 853
Глава
5 855
Глава
6 859
Глава
7 862
Глава
8 866
Глава
9 871
Глава
10 876
Глава
11 881
Глава
12 886
Глава
13 889
Глава
14 890
Глава
15 894
Глава
16 898
Приложение
3. Библиография 899
Углубленное
изучение C++ 899
Основополагающие
документы 900
UML 900
История
C++ 901
И
другое 901
Алфавитный
указатель 902
Эта
книга посвящается GGL
и
ее неукротимому духу
Предисловие
Наиболее существенные
изменения в 4-м издании касаются более
раннего озна-
комления читателя с
языком UML,
дополнительных
сведений о межфайловом
взаимодействии
в главе 13 и обновления материала,
относящегося к разработке
программного
обеспечения, в главе 16.
UML-диаграммы
являются удобным иллюстративным
средством. Поэтому,
чтобы иметь
возможность активно использовать эти
диаграммы в книге, мы соч-
ли
целесообразным как можно раньше
ознакомить читателя с основами языка
UML.
Раздел книги,
посвященный межфайловому взаимодействию,
объединяет
большой объем информации,
ранее содержавшейся в разных разделах.
Подходы
к созданию промышленных
программ претерпели изменения со
времени послед-
него издания, поэтому
соответствующие модификации, отражающие
новые тен-
денции, были внесены и в
эту книгу.
Со времени выхода
в свет последнего издания язык C++
практически не из-
менился. Тем не
менее кроме вышеупомянутых исправлений
и дополнений мы
постарались сделать
стиль изложения материала более ясным,
а также испра-
вить неточности и
опечатки, найденные в тексте предыдущего
издания.
Введение
Основная задача
этой книги — научить вас создавать
программы на языке C++,
однако,
разумеется, только этим мы не ограничимся.
В последние несколько лет
в сфере
программного обеспечения произошел
ряд значительных изменений,
о которых
мы расскажем чуть позже. Поэтому еще
одна задача книги — изло-
жить
концепции языка C++
в контексте развития программного
обеспечения.
Новые концепции
программирования
Двадцать и более лет назад программисты
реализовывали свои проекты
путем
непосредственного написания
кода. С возрастанием размера и сложности
проектов
становилось все яснее, что
такой подход неудачен. Проблема
заключалась в не-
пропорциональном
возрастании сложности процесса создания
самих программ.
Пожалуй, большие
программы можно без преувеличения
назвать самым слож-
ным творением
человека. Из-за своей сложности такие
программы нередко со-
держат ошибки.
Ошибки в программном обеспечении
потенциально могут стать
причиной
материального ущерба, а иногда и угрожать
жизни людей (например,
при
управлении авиа полетами).
В результате борьбы с проблемой
сложности
программного кода были
выработаны три новые концепции
программирования:
объектно-ориентированное
программирование (ООП);
унифицированный
язык моделирования (UML);
специализированные средства разработки
программного обеспечения.
В данной книге,
наряду с изучением C++,
уделяется внимание и упомяну-
тым
концепциям, что позволяет не просто
выучить язык программирования, но
и
получить представление об эффективных
способах разработки программного
обеспечения.
Объектно-ориентированное
программирование
Почему объектно-ориентированный подход
к программированию стал приори-
тетным
при разработке большинства программных
проектов? ООП предлагает
новый мощный
способ решения проблемы сложности
программ. Вместо того
чтобы рассматривать программу как
набор последовательно выполняемых
инст-
рукций, в ООП программа
представляется в виде совокупности
объектов, обла-
дающих сходными
свойствами и набором действий, которые
можно с ними про-
изводить. Возможно,
все то, о чем мы до сих пор говорили,
будет казаться вам
непонятным, пока
вы не изучите соответствующий раздел
программирования
более подробно.
Но со временем вы не раз сможете убедиться
в том, что приме-
нение
объектно-ориентированного подхода
делает программы понятнее, надеж-
нее
и проще в использовании.
Унифицированный
язык моделирования
Унифицированный
язык моделирования (UML)
— это графический
язык, вклю-
чающий в себя множество
различных диаграмм, помогающих
специалистам по
системному анализу
создавать алгоритмы, а программистам
— разбираться в
принципах работы
программы. UML
является мощным
инструментом, позво-
ляющим сделать
процесс программирования более легким
и эффективным. Мы
проводим краткое
ознакомление с UML
в главе 1, а
более специфические вопро-
сы,
связанные с UML,
рассматриваем
в других главах книги. Каждое новое
сред-
ство UML
вводится на
рассмотрение в том месте, где оно
становится полезным
для иллюстрации
разделов ООП. Таким образом, у вас
появляется возможность,
не прилагая
лишних усилий, освоить концепции языка
UML,
который
одновре-
менно будет способствовать
более эффективному усвоению C++.
Языки и платформы
разработки
Из всех
объектно-ориентированных языков C++
является наиболее широко
употребительным.
Язык Java,
представляющий
собой последнюю разработку
в области
объектно-ориентированных языков, лишен
таких составляющих, как
указатели,
шаблоны и множественное наследование,
что сделало его менее мощ-
ным и
гибким по сравнению с C++
(синтаксис
языка Java
очень похож на
син-
таксис C++,
поэтому знания относительно C++
с успехом могут быть примене-
ны при
программировании на Java).
Некоторые другие
объектно-ориентированные языки,
например, С#, также
успешно развиваются,
однако их распространение в значительной
степени усту-
пает C++.
До последнего
времени язык C++
развивался вне рамок стандартизации.
Это
означало, что каждый производитель
компиляторов по-своему реализовывал
отдельные
нюансы языка. Тем не менее комитет по
стандартам языка C++
орга-
низации ANSI/ISO
разработал
документ, ныне известный под названием
Стан-
дартного C++.
(ANSI
является
сокращением от английского названия
Амери-
канского Национального
Института Стандартов, а
ISO
— от
Международной
Организации Стандартов.)
Стандартный C++
включает в себя много допол-
нительных
возможностей, например
стандартную библиотеку шаблонов (STL).
В этой книге мы
будем придерживаться стандартного C++
за редкими исключе-
ниями, которые
будут специальным образом оговорены.
Наиболее популярной
средой разработки для C++
является продукт, совмест-
но
разработанный компаниями Microsoft
и Borland
и предназначенный
для рабо-
ты под управлением
операционных систем Microsoft
Windows.
Мы постарались
создать
примеры программ для этой книги таким
образом, чтобы они поддер-
живались
как компиляторами Microsoft,
так и компиляторами
Borland
(более
детальную
информацию о компиляторах можно найти
в приложении В «Micro-
soft
Visual
C++»
и приложении Г «Borland
C++
Builder»).
Для чего нужна
эта книга
Эта книга предназначена
для изучения объектно-ориентированного
програм-
мирования на языке C++
с помощью компиляторов фирм Microsoft
и Borland.
В
ней также рассматриваются методы
разработки программного обеспечения
и
графический язык UML.
Книга будет
полезна как профессиональным
про-
граммистам, так и студентам,
изучающим программирование, а также
всем тем,
кто испытывает интерес к
данной тематике.
Новые концепции
Объектно-ориентированное
программирование содержит несколько
концепций,
которые могут быть
незнакомы тем, кто практикует
программирование на таких
традиционных
языках, как Pascal,
Basic
и C. К этим
концепциям относятся
клас-
сы, наследование
и
полиморфизм,
составляющие основу объектно-ориентирован-
ного
подхода. Тем не менее, рассматривая
специфичные вопросы объектно-ори-
ентированных
языков, довольно легко уйти в сторону
от этих понятий. Многие
книги
обрушивают на читателя море деталей
относительно возможностей языка,
не
уделяя внимания тому, почему эти
возможности существуют. В этой
книге
нюансы языка рассматриваются
в связи с базовыми концепциями.
Последовательность
изложения материала
В этой книге мы
начинаем с рассмотрения самых простых
примеров, постепенно
усложняя их и
заканчивая полноценными
объектно-ориентированными при-
ложениями.
Интенсивность подачи нового материала
такова, что у читателя
есть возможность
без спешки усваивать пройденный
материал. Для облегчения
усвоения
нового материала мы постарались снабдить
его максимальным количе-
ством
наглядных иллюстраций. В конце каждой
главы приведены контрольные
вопросы
и упражнения, что позволяет использовать
книгу в качестве практиче-
ского
пособия для студентов. Ответы на вопросы
и упражнения, помеченные
знаком *,
приведены в приложении Ж. Упражнения
имеют различную степень
сложности.
Знания, необходимые
для чтения этой книги
Материал, изложенный
в этой книге, доступен даже тем, кто
изучает программи-
рование «с нуля».
Однако наличие опыта программирования
на таких языках,
как Visual
Basic,
не будет помехой
при чтении.
Многие учебники
по C++
рассчитаны на то, что читатель уже
знаком с язы-
ком C. Данная книга в
этом смысле является исключением.
Изучение C++
в этой
книге начинается «с чистого
листа», и отсутствие знакомства с языком
C никак
не скажется на эффективности
изучения C++.
Читатели, знакомые с C, навер-
няка
обратят внимание на то, как мало
существует различий между C и C++.
Желательно, чтобы
читатель этой книги имел представление
об основных
операциях Microsoft
Windows,
таких, как
запуск приложений и копирование
файлов.
Техническое и
программное обеспечение
Для работы с
программами вам потребуется компилятор
языка C++.
Для приме-
ров из этой книги подойдут
компиляторы Microsoft
C++
и Borland
C++.
В приложении В этой
книги можно найти подробную информацию
о работе
с компилятором фирмы
Microsoft,
а в приложении
Г — с компилятором фирмы
Borland.
Другие
компиляторы, рассчитанные на стандартный
C++,
будут безо-
шибочно воспринимать
большинство примеров в том виде, в каком
они приве-
дены в книге.
Для того чтобы выбранный компилятор
мог работать на вашем компьютере,
последний
должен обладать достаточным свободным
дисковым пространством,
объемом
оперативной памяти и скоростью работы
процессора. Эти параметры
можно
узнать из руководств по эксплуатации
соответствующих устройств.
Консольные
программы
В этой книге
содержится большое количество примеров
программ. Все про-
граммы являются
консольными, то есть выполняющимися в
текстовом окне
компилятора, либо
непосредственно в управляющем окне MS
DOS.
Это сделано
для
того, чтобы избежать сложностей,
возникающих при работе с
полноценными
графическими приложениями
Windows.
Исходные тексты
программ
Исходные тексты
программ доступны на сервере
http://www.samspublishing.com
