
- •Р. Лафоре
- •Глава 1. Общие сведения 32
- •Глава 3. Циклы и ветвления 92
- •Глава 4. Структуры 142
- •Глава 5. Функции 168
- •Глава 6. Объекты и классы 217
- •Глава 7. Массивы и строки 261
- •Глава 8. Перегрузка операций 312
- •Глава 9. Наследование 361
- •Глава 10. Указатели 411
- •Глава 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
Упражнения
Каждая глава
содержит около 12 упражнений, предполагающих
создание закон-
ченной программы на
C++.
Решения первых 3-4 упражнений приведены
в прило-
жении Ж. Остальные упражнения
рассчитаны на самостоятельное
выполнение
(читателям,
занимающимся преподавательской
деятельностью, рекомендуется
прочитать
раздел «Преподавателям» данного
вступления).
Проще, чем кажется
Говорят, что C++
трудно выучить. На самом деле C++
имеет немало общего с
другими языками
программирования, за исключением
нескольких новых идей.
Эти идеи
интересны и увлекательны, поэтому их
изучение едва ли покажется
скучным.
Кроме того, об этих идеях необходимо
иметь представление хотя бы
потому,
что они составляют часть «культуры
программирования». Мы надеемся,
что
эта книга поможет вам разобраться как
в общих концепциях, так и в специ-
фике
программирования на C++.
Преподавателям
Возможно,
преподавателям и другим читателям этой
книги, владеющим C и
С++,
будет интересно более подробно
ознакомиться с концепцией того
подхода,
который мы предлагаем при
изучении C++.
Стандартный
C++
Весь программный
код в этой книге удовлетворяет требованиям
стандартного
С++
за незначительными исключениями,
которые обусловлены некорректной
работой
компиляторов. Отдельная глава посвящена
STL
(стандартной
библиоте-
ке шаблонов),
являющейся частью стандартного C++.
Унифицированный
язык моделирования (UML)
В предыдущем издании
книги мы рассказывали о UML
в последней
главе. В на-
стоящем издании изучение
UML
проходит в
различных главах книги, и, как пра-
вило,
там, где это необходимо. Например,
диаграммы классов UML
изучаются
одновременно
с взаимодействием различных классов,
а обобщение — в связи с
понятием
наследования.Глава 1 «Общие сведения» включает список тем, касающихся uml, с указа- нием их расположения в книге.
Средства
разработки программного обеспечения
Разработка прикладного программного
обеспечения становится все более и
бо-
лее важным аспектом программирования.
Увы, но зачастую процесс
создания
объектно-ориентированной
программы остается для студентов
загадкой. Это по-
служило для нас
поводом включить в книгу специальную
главу, касающуюся
разработки
программного обеспечения, где основное
внимание уделено объект-
но-ориентированному
программированию.
Различия
между C и C++
В настоящее время
существует лишь небольшое число высших
и средних специ-
альных учебных
заведений, в которых перед изучением
C++
студентов сначала
обучают языку C.
Мы также не считаем такой подход
правильным, поскольку,
по нашему
мнению, языки C и C++
полностью независимы. В синтаксическом
плане
C и C++
очень схожи; более того, C является
подмножеством C++.
Одна-
ко установившееся мнение о
схожести самих языков является
исторически оши-
бочным, поскольку
подходы к написанию программ на C и C++
кардинальным
образом различаются.
С++
завоевал большую популярность, чем C,
потому
что стал
мощным
инструментом для разработки
сложного программного обеспечения.
Это послу-
жило причиной для того,
чтобы не рассматривать изучение C как
обязательное
перед изучением C++.
Те студенты, которые знакомы с языком
C, могут опус-
тить часть материала,
изложенного в книге, однако значительная
часть материа-
ла окажется для них
новой.
Оптимальный
порядок изучения ООП
Мы могли бы начать
эту книгу с изучения процедурно-ориентированной
кон-
цепции программирования, присущей
языкам C и C++,
и лишь после этого
приступить к ООП,
однако для нас является более важным
приступить к объект-
но-ориентированному
программированию как можно быстрее.
Таким образом,
нашей задачей является
рассмотрение основы процедурного
программирования,
а затем —
непосредственно изучение классов. Уже
начальные главы этой книги
демонстрируют
применение языка C++,
в корне отличающееся от С.
Некоторые вопросы
рассматриваются в этой книге несколько
раньше, чем
это принято в другой
литераtype по языку С: например, рассмотрение
структур
предшествует рассмотрению
классов. Причиной для этого является
то, что класс
представляет собой не
что иное, как синтаксическое расширение
структуры, и,
следовательно, структура
является ключом к пониманию C++.
Такие элементы
языка, как указатели, рассматриваются
несколько позже,
чем в большинстве
книг по языку C. Указатели не являются
необходимыми при
изучении основ ООП
и в то же время, как правило, представляют
трудность
для понимания. Таким
образом, обсуждение указателей
откладывается до тех
пор, пока не будут рассмотрены основные
концепции объектно-ориентирован-
ного
программирования.
Нововведения
в C++
Некоторые средства
языка C были заменены на аналоги из
языка C++.
Напри-
мер, основные функции
ввода/вывода
языка C printf()
и scanf()
в C++
практиче-
ски не используются,
поскольку cin
и cout
более удобны.
Поэтому мы опускаем
описания этих
и некоторых других функций. По аналогичной
причине вместо
макроопределения
#define,
типичного для
C, практически везде используется
спецификатор
const
и встроенные
функции C++.
Избыточные
возможности
Поскольку основное
внимание в этой книге сконцентрировано
на объектно-
ориентированном
программировании, мы можем исключить
из рассмотрения те
средства языка
C, которые редко используются и не имеют
отношения к объект-
но-ориентированному
программированию. Примером одного из
таких средств
являются побитовые
операции языка C. Мы не будем детально
рассматривать
эти средства, а лишь
кратко упомянем их.
Итак, результатом нашей работы является
книга, неспешно, но динамично
вводящая
читателя в курс объектно-ориентированного
программирования и его
практического
применения.
Упражнения
В книге не приводятся
решения для тех упражнений, которые не
помечены зна-
ком *,
но их можно найти на сайте издательства,
как и примеры, встречающиеся
в этой
книге.
Упражнения каждой главы различаются
между собой по степени сложности.
Первые
по порядку упражнения обычно являются
легкими, а в конце списка
располагаются
наиболее сложные упражнения. Это будет
удобно для препода-
вателей, которые
получают возможность обеспечивать
своих студентов задания-
ми,
соответствующими уровню их подготовки.
От издательства
Ваши замечания,
предложения, вопросы отправляйте по
адресу электронной
почты comp@piter.com
(издательство
«Питер», компьютерная редакция).
Мы
будем рады узнать ваше мнение!
Подробную информацию
о наших книгах вы найдете на web-сайте
издатель-
ства http://www.piter.com
С текстами программ
из этой книги вы можете ознакомиться
по адресу http://www.piter.com/download