Программирование на С++
Покупка
Тематика:
Программирование на C и C++
Издательство:
ДМК Пресс
Год издания: 2007
Кол-во страниц: 672
Дополнительно
Вид издания:
Учебник
Уровень образования:
ВО - Бакалавриат
ISBN: 5-93700-008-0
Артикул: 615935.01.99
Книга рассчитана на тех, кто нуждается в понятном и доступном введении в язык C++, и может использоваться как самоучитель. Она также рассказывает о компьютерах и алгоритмическом решении задач, поэтому может служить в качестве первого учебника программирования. Авторы убедительно показывают, что темы, когда-то считавшиеся слишком сложными для вводного курса по С++ и объектно-ориентированному программированию, можно успешно объяснять на ранних стадиях обучения. Книга является удачным выбором для первого знакомства с С++. Материал излагается в строгой, но доступной для начинающего программиста форме. Авторы приводят многочисленные откомпилированные и проверенные упражнения с ответами. Все входящие в книгу программы размещены на Web-сайте издательства «ДМК» (www.dmk.ru) и легко доступны читателям. Издание предназначено для пользователей ПК (от начального до среднего уровня), начинающих программистов, школьников, студентов и преподавателей информатики.
Тематика:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов.
Для полноценной работы с документом, пожалуйста, перейдите в
ридер.
Нейл Дейл, Чип Уимз, Марк Хедингтон Программирование на С++
Programming in C++ Nell Dale University of Texas, Austin Chip Weems University of Massachusetts, Amherst Mark Headington University of Wisconsin – LaCrosse JONES AND BARTLETT PUBLISHERS Sudbury, Massachusetts Boston toronto London singapore
Программирование на C++ Нелл Дейл Техасский университет, Остин Чип Уимз Массачусетский университет, Амхерст Марк Хедингтон Университет ВисконсинаЛа Кросс Серия «Учебник» Москва
Дейл Н., Уимз Ч., Хедингтон М. Д94 Программирование на С++: Пер. с англ. – М.: ДМК Пресс. – 672 с.: ил., (Серия «Учебник»). ISBN 5-93700-008-0 Книга рассчитана на тех, кто нуждается в понятном и доступном введении в язык C++, и может использоваться как самоучитель. Она также рассказывает о компьютерах и алгоритмическом решении задач, поэтому может служить в качестве первого учебника программирования. Авторы убедительно показывают, что темы, когда-то считавшиеся слишком сложными для вводного курса по С++ и объектно-ориентированному программированию, можно успешно объяснять на ранних стадиях обучения. Книга является удачным выбором для первого знакомства с С++. Матери ал излагается в строгой, но доступной для начинающего программиста форме. Авторы приводят многочисленные откомпилированные и проверенные упражнения с ответами. Все входящие в книгу программы размещены на Web-сайте издательства «ДМК» (www.dmk.ru) и легко доступны читателям. Издание предназначено для пользователей ПК (от начального до среднего уровня), начинающих программистов, школьников, студентов и преподавателей информатики. ББК 32.973-018.1 Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Материал, изложенный в данной книге, многократно проверен. Но, поскольку вероятность технических ошибок все равно существует, издательство не может гарантировать абсолютную точность и правильность приводимых сведений. В связи с этим издательство не несет ответственности за возможные ошибки, связанные с использованием книги. ISBN 0-7637-0537-3 (англ.) Copyright © by Jones and Bartlett Publishers ISBN 5-93700-008-0 (рус.) © Перевод на русский язык, оформление. ДМК Пресс ББК 32.973-018.1 Д94 ORIGINAL ENGLISH LANGUAGE EDITION PUBLISHED BY Jones and Bartlett Publishers, Inc., 40 Tall Pine Drive, Sudbury, MA 01776 COPYRIGHT Jones and Bartlett Publishers © ALL RIGHTS RESERVED
Содержание Предисловие .........................................................................................................15 Глава I. Введение в программирование и решение задач ..........21 Введение в программирование .......................................................................22 Как пишутся программы ..........................................................................................22 Что такое язык программирования ...............................................................27 Устройство компьютера .....................................................................................30 Методика решения задач .................................................................................35 Задавайте вопросы .................................................................................................36 Находите привычные ориентиры ............................................................................36 Решайте по аналогии ..............................................................................................36 Анализ цели и средств ............................................................................................37 «Разделяй и властвуй» ............................................................................................38 Метод «строительных плит» ...................................................................................38 Слияние решений ....................................................................................................38 Мысленный барьер: страх сделать первый шаг .....................................................40 Алгоритмическое решение задачи ........................................................................40 Итоги главы ............................................................................................................40 Глава II. Синтаксис, семантика и разработка программ на C++ ..............................................................................42 Элементы программ на С++ ..............................................................................43 Структура программы .............................................................................................43 Синтаксис и семантика ...........................................................................................45 Синтаксические шаблоны .......................................................................................47
Называем элементы программ: идентификаторы .................................................49 Данные и их типы.....................................................................................................50 Описываем элементы программы: объявления ......................................................54 Начинаем действовать: выполняемые выражения .................................................58 Сверх минимума: добавляем комментарии к программе .....................................64 Построение программы .....................................................................................65 Блоки или составные выражения ............................................................................67 Препроцессор С++ ..................................................................................................69 Пример программирования. «Автопробег» ................................................70 Советы по тестированию и отладке ...............................................................73 Итоги главы ............................................................................................................73 Быстрая самопроверка ...........................................................................................74 Упражнения для подготовки к экзамену .................................................................76 Упражнения для разминки ......................................................................................80 Задачи по программированию ..............................................................................81 Глава III. Арифметические выражения, вызов функций и вывод ..............................................................83 Арифметические выражения.............................................................................84 Правила приоритета ...............................................................................................84 Неявное приведение и явное преобразование типов ...........................................85 Вызов функций и библиотечные функции ...................................................88 Функции, возвращающие значение ......................................................................88 Библиотечные функции ...........................................................................................90 Функции типа void ...................................................................................................91 Форматирование вывода ..................................................................................92 Вставка пустых строк ...............................................................................................93 Вставка пробелов внутри строки ............................................................................94 Манипуляторы .........................................................................................................95 Пример программирования. «Измерения по карте» ............................. 100 Советы по тестированию и отладке ............................................................. 103 Итоги главы .......................................................................................................... 103 Быстрая самопроверка ........................................................................................ 104 Упражнения для подготовки к экзамену .............................................................. 105 Упражнения для разминки ................................................................................... 108 Задачи по программированию ........................................................................... 110 Глава IV. Программный ввод и процесс разработки програм много обеспечения .................................................................... 112 Ввод данных в программу ............................................................................. 113 Потоки ввода и операция извлечения ................................................................. 113 Маркер считывания и символ новой строки ....................................................... 116 Считывание символьных данных с помощью get ................................................ 117 Программирование на С++
Пропуск символов с помощью ignore .................................................................. 120 Интерактивный вводвывод ............................................................................ 121 Неинтерактивный вводвывод ....................................................................... 122 Файловый вводвывод ..................................................................................... 123 Что такое файл ..................................................................................................... 123 Использование файлов ........................................................................................ 124 Пример программы с использованием файлов .................................................. 127 Ошибка ввода ..................................................................................................... 128 Разработка программного обеспечения ................................................... 130 Функциональная декомпозиция ................................................................. 130 Программные модули........................................................................................... 132 Объектноориентированная разработка ................................................... 133 Пример программирования. «Средневзвешенное значение экзаменационных оценок» ........................................................................... 136 Тестирование и отладка ................................................................................. 139 Советы по тестированию и отладке .................................................................... 141 Итоги главы ........................................................................................................... 141 Быстрая самопроверка ........................................................................................ 142 Упражнения для подготовки к экзамену .............................................................. 143 Упражнения для разминки ................................................................................... 145 Задачи по программированию ........................................................................... 147 Глава V. Управляющие структуры: условия, логические выра жения, выбор ................................................................................. 149 Поток управления .............................................................................................. 150 Выбор .................................................................................................................... 150 Условия и логические выражения ................................................................. 151 Логические выражения ........................................................................................ 151 Приоритет операций ............................................................................................ 158 Операции сравнения и типы с плавающей точкой ............................................. 160 Условный оператор............................................................................................ 160 Условный оператор в форме IfThenElse ............................................................ 160 Применение блоков в условном операторе ....................................................... 162 Условный оператор в форме IfThen .................................................................... 163 Одна распространенная ошибка ........................................................................ 165 Вложенные условные операторы ............................................................... 165 Висячее else ........................................................................................................... 168 Проверка состояния потока вводавывода ............................................... 169 Пример программирования. «Результат экзамена» .............................. 172 Тестирование и отладка ................................................................................... 175 Этап решения задачи: сквозной контроль алгоритма ....................................... 175 Этап реализации .................................................................................................. 178 Автоматическая проверка при компиляции и выполнении ................................ 182 Содержание
Советы по тестированию и отладке .................................................................... 182 Итоги главы ........................................................................................................... 184 Быстрая самопроверка ........................................................................................ 185 Упражнения для подготовки к экзамену .............................................................. 186 Упражнения для разминки ................................................................................... 189 Задачи по программированию ........................................................................... 192 Глава VI. Циклы ................................................................................................... 195 Оператор While ................................................................................................... 196 Этапы выполнения цикла................................................................................. 197 Циклы с While ...................................................................................................... 198 Циклы, управляемые счетчиком ........................................................................... 198 Циклы, управляемые событием............................................................................ 199 Циклические подзадачи ....................................................................................... 202 Как проектировать циклы ............................................................................... 205 Проектирование потока управления ................................................................. 205 Проектирование процесса внутри цикла ........................................................... 206 Выход из цикла .................................................................................................... 207 Вложенная логика ............................................................................................. 207 Проектирование вложенных циклов ................................................................... 209 Пример программирования. «Средний доход мужчин и женщин» .. 210 Тестирование и отладка .................................................................................. 214 Методика проверки циклов ................................................................................. 214 Советы по тестированию и отладке .................................................................... 215 Итоги главы ........................................................................................................... 216 Быстрая самопроверка ........................................................................................ 217 Упражнения для подготовки к экзамену .............................................................. 218 Упражнения для разминки ................................................................................... 221 Задачи по программированию ........................................................................... 222 Глава VII. Функции ............................................................................................ 224 Функциональная декомпозиция и функции типа void .......................... 225 Запись модулей как функций типа void .............................................................. 225 Синтаксис и семантика функций типа void ................................................. 228 Вызов функции ...................................................................................................... 228 Описания и объявления функций ........................................................................ 229 Локальные переменные ....................................................................................... 231 Оператор return .................................................................................................... 232 Файлы заголовков ................................................................................................ 233 Параметры ............................................................................................................ 233 Параметры, передаваемые по значению ........................................................... 235 Параметры, передаваемые по ссылке ................................................................ 235 Разработка функций ......................................................................................... 238 Запись утверждений в виде комментариев ......................................................... 239 Программирование на С++
Документирование направления потока данных ............................................... 241 Пример программирования. «Сравнение продаж в мебельных магазинах» ................................................................................. 244 Тестирование и отладка ................................................................................... 250 Библиотечная функция assert ............................................................................... 251 Советы по тестированию и отладке .................................................................... 253 Итоги главы .......................................................................................................... 254 Быстрая самопроверка ....................................................................................... 255 Упражнения для подготовки к экзамену .............................................................. 256 Упражнения для разминки ................................................................................... 261 Задачи по программированию ........................................................................... 263 Глава VIII. Область и время действия ..................................................... 267 Область действия и время жизни ................................................................... 268 Область действия идентификаторов ................................................................... 268 Правила области действия ................................................................................... 270 Объявления и описания переменных .................................................................. 274 Время жизни переменной .................................................................................... 275 Разработка интерфейса ................................................................................... 278 Побочные эффекты ............................................................................................... 278 Глобальные константы .......................................................................................... 279 Функции, возвращающие значение ........................................................... 280 Логические функции ............................................................................................ 283 Проектирование интерфейса функций, возвращающих значение .................. 284 Когда применяют функции, возвращающие значение ...................................... 285 Пример программирования. «Вес и балансировка самолета» ........... 286 Тестирование и отладка ................................................................................... 294 Заглушки и драйверы ....................................................................................... 294 Советы по тестированию и отладке .................................................................... 295 Итоги главы .......................................................................................................... 296 Быстрая самопроверка ........................................................................................ 297 Упражнения для подготовки к экзамену .............................................................. 299 Упражнения для разминки ................................................................................... 302 Задачи по программированию ........................................................................... 304 Глава IX. Дополнительные управляющие структуры .................. 307 Оператор Switch ................................................................................................. 308 Оператор DoWhile ............................................................................................ 311 Оператор For ........................................................................................................ 313 Инструкции break и continue ........................................................................... 315 Критерии выбора циклической структуры ................................................ 318 Пример программирования. «Среднемесячное количество осадков» ........................................................................................... 318 Содержание
Тестирование и отладка ................................................................................... 322 Советы по тестированию и отладке .................................................................... 323 Итоги главы ........................................................................................................... 323 Быстрая самопроверка ........................................................................................ 323 Упражнения для подготовки к экзамену .............................................................. 324 Упражнения для разминки ................................................................................... 326 Задачи по программированию ........................................................................... 328 Глава X. Простые типы данных ................................................................ 331 Встроенные простые типы ............................................................................... 332 Целые типы ............................................................................................................ 334 Типы с плавающей точкой .................................................................................... 335 Дополнительные операторы С++ .................................................................. 336 Операторы присваивания и инструкция присваивания ..................................... 337 Операторы инкремента и декремента ................................................................ 338 Поразрядные операторы ..................................................................................... 339 Оператор преобразования ................................................................................. 339 Оператор sizeof .................................................................................................... 340 Оператор ?: .......................................................................................................... 340 Приоритет операторов ........................................................................................ 340 Обработка символьных данных .................................................................... 341 Наборы символов ................................................................................................. 342 Константы типа char в языке С++ ................................................................... 343 Методы программирования ................................................................................. 344 Подробнее о числах с плавающей точкой ................................................. 347 Представление чисел с плавающей точкой ........................................................ 347 Арифметика чисел с плавающей точкой ............................................................ 348 Простые типы, определенные пользователем ......................................... 352 Перечисляемые типы ............................................................................................ 352 Именованные и анонимные типы данных ........................................................... 357 Файлы заголовков, написанные пользователем ................................................ 359 Подробнее о приведении типов .................................................................... 359 Приведение типов в арифметических инструкциях и инструкциях сравнения ..................................................................................... 360 Приведение типов при присваивании, передаче параметров и возвращении значения функции ...................................................................... 360 Пример програмирования. «Напоминание о дне рождения» ............ 362 Тестирование и отладка .................................................................................. 367 Данные с плавающей точкой ............................................................................... 367 Борьба с ошибками ввода ................................................................................... 367 Советы по тестированию и отладке .................................................................... 368 Итоги главы ........................................................................................................... 369 Программирование на С++
Быстрая самопроверка ........................................................................................ 370 Упражнения для подготовки к экзамену .............................................................. 371 Упражнения для разминки ................................................................................... 374 Задачи по программированию ........................................................................... 376 Глава XI. Одномерные массивы ............................................................... 377 Сравнение простых и составных типов данных ........................................ 378 Одномерные массивы ....................................................................................... 379 Объявление массивов .......................................................................................... 381 Обращение к отдельным компонентам............................................................... 382 Индексы массивов за пределами границ ............................................................ 384 Инициализация массивов при объявлении ......................................................... 385 Примеры объявления и обращения к массивам ................................................. 386 Передача массивов в качестве параметров ....................................................... 389 Обработка массивов ......................................................................................... 391 Обработка подмассивов ..................................................................................... 391 Параллельные массивы ........................................................................................ 392 Смысловое значение индексов ............................................................................ 392 Пример програмирования. «Сравнение двух списков» ........................ 392 Тестирование и отладка ................................................................................... 397 Советы по тестированию и отладке .................................................................... 398 Итоги главы ........................................................................................................... 399 Быстрая самопроверка ........................................................................................ 399 Упражнения для подготовки к экзамену .............................................................. 401 Упражнения для разминки ................................................................................... 403 Задачи по программированию ........................................................................... 404 Глава XII. Применение массивов: списки и строки Cписки и списочные алгоритмы ..................................................................... 410 Последовательный поиск в неупорядоченном списке ........................................ 411 Сортировка ........................................................................................................... 413 Последовательный поиск в упорядоченном списке ............................................ 416 Вставка в упорядоченный список ........................................................................ 417 Бинарный поиск в упорядоченном списке .......................................................... 421 Обработка строк ................................................................................................. 425 Инициализация строк .......................................................................................... 427 Ввод и вывод строк ............................................................................................... 428 Ввод имен файлов при выполнении программы ................................... 431 Библиотечные функции для работы со строками ............................................... 432 Использование typedef с массивами................................................................... 434 Пример программирования. «Напоминание о дне рождения – 2» ...435 Тестирование и отладка ................................................................................... 439 Советы по тестированию и отладке .................................................................... 440 Итоги главы ........................................................................................................... 441 Содержание
Быстрая самопроверка ........................................................................................ 441 Упражнения для подготовки к экзамену .............................................................. 442 Упражнения для разминки ................................................................................... 445 Задачи по программированию ........................................................................... 447 Глава XIII. Многомерные массивы ......................................................... 449 Двумерные массивы ........................................................................................ 450 Обработка двумерных массивов .................................................................. 454 Сложение по строкам ........................................................................................... 455 Сложение по столбцам ........................................................................................ 457 Инициализация таблицы ...................................................................................... 458 Вывод таблицы ...................................................................................................... 459 Передача двумерных массивов в качестве параметров ....................... 460 Другой способ задания двумерных массивов ........................................... 462 Многомерные массивы .................................................................................... 464 Пример программирования. «Муниципальные выборы» .................... 468 Тестирование и отладка ................................................................................... 476 Советы по тестированию и отладке .................................................................... 478 Итоги главы .......................................................................................................... 478 Быстрая самопроверка ........................................................................................ 479 Упражнения для подготовки к экзамену .............................................................. 480 Упражнения для разминки ................................................................................... 484 Задачи по программированию ........................................................................... 486 Глава XIV. Записи .............................................................................................. 489 Записи ................................................................................................................... 490 Массивы записей .............................................................................497 Иерархические записи ....................................................................498 Союзы .............................................................................................501 Подробнее о выборе структуры данных .................................................... 502 Представление логической организации объекта с помощью иерархических записей ....................................................................................... 502 Пример программирования. «Кампания в поддержку кандидата» ................................................................................. 504 Тестирование и отладка ................................................................................... 514 Советы по тестированию и отладке .................................................................... 516 Итоги главы .......................................................................................................... 516 Быстрая самопроверка ........................................................................................ 517 Упражнения для подготовки к экзамену .............................................................. 518 Упражнения для разминки ................................................................................... 521 Задачи по программированию ........................................................................... 524 Программирование на С++
Глава XV. Классы, абстракция данных и ООП .................................... 529 Абстрактные типы данных ............................................................................... 530 Классы С++ ............................................................................................................ 532 Класс, объекты класса и члены класса ................................................................ 535 Встроенные операции над классами ................................................................... 535 Область действия классов .................................................................................... 538 Сокрытие информации ........................................................................................ 539 Файлы спецификации и реализации ........................................................... 541 Файл спецификации ............................................................................................ 541 Файл реализации ................................................................................................. 543 Компиляция и компоновка программы, состоящей из нескольких файлов .......................................................................................... 547 Инициализации классов с использованием конструкторов ................. 550 Вызов конструктора ............................................................................................. 552 Измененные файлы спецификации и реализации для TimeType ....................... 552 Рекомендации по использованию конструкторов классов ................................ 554 Объектноориентированное программирование .................................. 556 Объекты ................................................................................................................. 557 Наследование ..................................................................................................... 559 Создание одного класса из другого ............................................................. 559 Спецификация класса ExtTime ............................................................................. 563 Реализация класса ExtTime .................................................................................. 566 Композиция .......................................................................................................... 569 Разработка класса TimeCard ............................................................................... 569 Реализация класса TimeCard ............................................................................... 570 Динамическое связывание и виртуальные функции .............................. 573 Проблема разделения ......................................................................................... 574 Виртуальные функции .......................................................................................... 575 Объектноориентрованная разработка ..................................................... 578 Шаг 1: Определение объектов и операций ........................................................ 578 Шаг 2: Определение взаимоотношений между объектами .............................. 579 Шаг 3: Разработка драйвера .............................................................................. 580 Реализация проекта .......................................................................................... 581 Тестирование и отладка ................................................................................... 582 Советы по тестированию и отладке .................................................................... 585 Итоги главы ......................................................................................................... 587 Быстрая самопроверка ........................................................................................ 588 Упражнения для подготовки к экзамену .............................................................. 591 Упражнения для разминки ................................................................................... 596 Задачи по программированию ........................................................................... 599 Содержание
Глава XVI. Рекурсия .......................................................................................... 604 Что такое рекурсия? .......................................................................................... 605 Ханойские башни .............................................................................................. 609 Рекурсивные алгоритмы и структурированные переменные ............. 613 Рекурсия или итерации? .................................................................................. 616 Тестирование и отладка ................................................................................... 616 Советы по тестированию и отладке .................................................................... 616 Итоги главы ........................................................................................................... 617 Быстрая самопроверка ........................................................................................ 617 Упражнения для подготовки к экзаменам ......................................................... 618 Упражнения для разминки ................................................................................... 619 Задачи по программированию ........................................................................... 620 ПРИЛОЖЕНИЯ ..................................................................................................... 622 Приложение А. Зарезервированные слова ............................................... 622 Приложение Б. Приоритет операторов ...................................................... 622 Приложение В. Библиотечные функции С++ ............................................ 623 Приложение Г. Символьные таблицы .......................................................... 632 Приложение Д. Форматирование текста программы ........................... 634 Словарь терминов ........................................................................................... 638 Ответы на некоторые вопросы ................................................................. 645 Предметный указатель ................................................................................ 668 Программирование на С++
Предисловие Книга «Программирование на C++» рассчитана на тех, кто нуждается в понятном и доступном введении в язык C++. Нас, авторов этой книги, порадовала популярность нашего предыдущего руководства, “Programming and Problem Solving with C++”. Тем не менее многие читатели высказались за его сокращенный вариант, более пригодный для первого знакомства с основами программирования. Наш опыт показал, что темы, когда-то считавшиеся слишком сложными для вводного курса, можно объяснять на ранних стадиях обучения программированию. Например, входные и выходные условия используются при сквозном контроле алгоритмов и выборе стратегии их тестирования, а также для документирования интерфейса функций, заданных пользователем. Абстрактное представление и абстрактные типы данных объясняются одновременно с механизмом классов C++, что является естественным введением в объектно-ориентированное программирование. В этой книге мы по-прежнему придерживаемся той манеры изложения, кото рая делает материал наиболее доступным для начинающего программиста, оставаясь при этом достаточно строгой. Главы содержат много откомпилированных и проверенных упражнений. Почти каждая глава заканчивается программным примером. Такие примеры приводятся после изложения основного материала главы, которое прерывается только короткими упражнениями. Использование C++ Отдельные специалисты отрицательно относятся к C и C++, считая, что эти языки предоставляют программисту слишком много свободы и тем самым потворствуют написанию запутанных, трудных для понимания программ. Авторский опыт не
подтверждает подобную точку зрения – при условии, что использование особенностей языка правильно оформлено и документировано. Мы считаем, что при грамотном преподавании основ программотехники начинающие программисты могут научиться писать на C++ понятный и легко читаемый код. Предпочтение, отдаваемое нами языку C++ по сравнению с C, объясняет ся просто. C++ обеспечивает более тщательный контроль соответствия типов и почти полностью устраняет потребность в макрокомандах препроцессора. В этом языке вводятся ссылочные типы, так что передача параметра по ссылке может быть объяснена без предварительного изучения указателей. Поток ввода-вывода C++ более прост для применения, чем функции printf и scanf. C++ поддерживает абстрактное представление данных, сокрытие информации и объектно-ориентированное программирование. И, конечно, изучение основ C++ во вводном курсе устраняет необходимость перехода с C на C++ при дальнейшем освоении программирования. Необходимо подчеркнуть, что эта книга не является учебником языка С++ и не претендует на его полное освещение, хотя и использует C++ как средство обучения концепциям программирования. Например, в ней не рассматривается механизм шаблонов C++. Опущены и некоторые другие элементы языка, такие как перегрузка операторов, параметры по умолчанию и механизмы развитых форм наследования. Это сделано для того, чтобы не перегружать начинающего программиста избыточной информацией. Подход к разработке В настоящее время существуют противоположные мнения относительно того, когда вводить понятие объектно-ориентированного программирования (ООП). Некоторые преподаватели высказываются за изучение OOП с самого начала курса, в то время как другие (те, для кого предназначена эта книга) предпочитают более разнородный подход, при котором структурный и объектно-ориентированный дизайн программ представлены как взаимодополняющие средства для разработки проектов. То, что некоторые преподаватели называют ООП, на самом деле правильнее было бы назвать ОБП – объектно-базируемым программированием. ОБП ведет к использованию предоставляемых извне классов C++ в том виде, в котором они существуют, то есть без изменений. Хотя ОБП позволяет создавать программы с содержательными (например, графическими) объектами, для настоящего OOП требуется гораздо больше: разработка и реализация абстрактных типов данных, анализ и проектирование иерархий наследования, использование полиморфизма в форме связывания операций с объектами во время выполнения. Организация глав книги «Программирование на C++» отражает постепен ный подход к OOП. Предварительный обзор объектно-ориентированного дизайна программ предлагается вниманию читателя уже в главе 4. Однако последовательность тем в главах с 1 по 15 отражает наше твердое мнение, состоящее в том, что концепция OOП становится наиболее ясной только после прочного освоения методов разработки алгоритмов и способов абстрактного представления управления и данных. Предисловие
Особенности книги Ресурсы Web. Отличительной особенностью этой книги является включение в нее ссылок на ресурсы World Wide Web, посвященные языку С++. Ключевые темы каждой главы помечены пиктограммой Web, которая приглашает читателей посетить специальную Web-страницу издательства Jones and Bartlett, содержащую ссылки на сетевые ресурсы по C++. Web-страница может быть найдена по адресу http://www.jbpub.com/C++links и просмотрена с помощью стандартного браузера WWW, такого как Netscape Navigator или Microsoft Internet Explorer. Каждая ссылка на сетевой ресурс снабжена кратким описанием. Оно позволяет получить представление о данном ресурсе еще до соединения с Web-узлом того или иного учреждения или частного лица, предоставляющего дополнительную информацию по темам данной книги. Эта особенность руководства дает пользователю быстрый доступ к практическим примерам применения понятий и концепций, включенных в книгу. Web-страница издательства будет регулярно обновляться, с тем чтобы читатели получали из сети наиболее новую информацию по теме. Перечень задач. Каждая глава начинается со списка задач, поставленых перед изучающим программирование. Усвоение материала проверяется и закрепляется с помощью упражнений, помещенных в конце главы. Примеры программирования. Почти все главы содержат программные приме ры, включающие постановку задачи и подробный анализ ее решения. Предлагаемое решение кодируется на языке C++. К каждому примеру прилагаются типичные тестовые данные и результаты работы программы. В завершение обсуждается отладка программного примера. Тестирование и отладка. Этот раздел, также включенный в большинство глав, посвящен применению материала главы к тестированию программ. Каждый раздел завершается полезными советами по тестированию и отладке. Быстрая самопроверка. Контрольные вопросы позволяют проверить, на сколько начинающий программист усвоил основные понятия данной главы. Читатель, освоивший материал, должен быть в состоянии дать ответ на поставленный вопрос сразу после его прочтения. Правильность ответа можно проверить, заглянув в подсказку в конце раздела. Номер страницы, на которой обсуждалась соответствующая тема, указан в конце каждого вопроса, чтобы обучающийся мог быстро вернуться к неусвоенному материалу в случае неправильного ответа. Упражнения для подготовки к экзамену. Эти упражнения предназначены для того, чтобы помочь слушателю курса самостоятельно подготовиться к экзамену. Вопросы этого раздела обычно допускают однозначные ответы и подготовлены таким образом, чтобы на каждый из них можно было ответить за несколько минут. Упражнения для разминки. Выполняя упражнения этого раздела, начинаю щий программист может осваивать отдельные синтаксические конструкции языка С++ без необходимости писать законченную программу. Задачи по программированию. Такие задачи требуют от программиста разра ботки законченной программы. Предисловие
Дополнительные материалы Руководство преподавателя с набором тестов. Руководство «Instructor’s Guide», подготовленное теми же соавторами, включает в себя пояснения для преподавателей программирования, объяснения к примерам, приведенным без ответов в настоящей книге, лекционные диапозитивы, а также избранные экзаменационные вопросы. Преподавательский компакт-диск. Этот компакт-диск содержит конспект лекций по каждой главе данной книги в формате презентаций Power Point®. Компьютерный конспект может применяться преподавателем для работы с учениками в аудитории. Помимо этого, учебный материал может быть установлен на жесткий диск для использования слушателями курса в процессе изучения С++. Компактдиск также содержит компьютерные версии тестов и экзаменов. Кроме того, для многих глав приведены Web-страницы, с помощью которых имитируется работа с Internet без необходимости прямого подсоединения к сети. Исходные тексты программ. Исходные тексты всех программ, приведенных в книге, можно найти по адресу http://www.jbpub.com/disks на Web-узле издательства Jones and Bartlett. Подробное объяснение того, как загрузить эти исходные тексты на свой компьютер, приведено на следующей за предисловием странице. Благодарности Мы благодарны людям, которые помогли нам в подготовке этой книги. Авторы многим обязаны профессорам и преподавателям факультетов вычислительной техники и информатики (Computer Science Departments) Техасского университета (University of Texas) в Остине, Массачусетского университета (University of Massachusetts) в Амхерсте и университета Висконсина-ЛаКросс (University of Wisconsin–LaCrosse). Особую благодарность хочется выразить Джеффу Брумфилду (Jeff Brumfield) за разработку метаязыка синтаксических шаблонов и за разрешение использовать его в этой книге. Спасибо также Сильвии Соркин (Sylvia Sorkin) из Essex Community Colledge, Балтимор, штат Мэриленд, подготовившей спомощью пакета Power Point® 7.0 для Windows 95 лекционные диапозитивы, помещенные на преподавательском компакт-диске. Мы благодарим лекторов, ассистентов преподавателя, ответственных за кон сультации для студентов и всех, кто так или иначе имеет отношение к проведению курса, для которого была написана эта книга, а также самих студентов за многочисленные полезные советы. С благодарностью сообщаем, что следующие профессора и преподаватели при слали свои ответы на опрос CS1, проведенный издательством Jones and Bartlett: Элизабет Алперт (Elizabeth Alpert), Hartnell College; Хамид Р. Арабния (Hamid R. Arabnia), University of Georgia; Дон Бейлз (Don Bailes), East Tennessee State University; Алберт Л. Бейкер (Albert L. Baker), Iowa State University; Наташа Бозович (Natasha Bozovic), San Jose State University; Джон Чигас (John Cigas), Rockhurst College; Беннетт Кларк (Bennett Clark), South Dakota School of Mines and Technology; Ли Корнелл (Lee Cornell), Mankato State University; Джон Креншоу Предисловие
(John Crenshaw), Western Kentucky University; Дэвид О. Эдвардз (David O. Edwards), Goldey-Beacom College; Энтони Дж. Фарелл (Anthony J. Farrell), Chestnut Hill College; Энн Р. Форд (Ann R. Ford), University of Michigan; Сьюзен Гоуч (Susan Gauch), University of Kansas; Рэндалл Хок (Randall Hock), Saginaw Valley State University; Джек Ходжиз (Jack Hodges), San Francisco State University; Хайки Кох (Hikyoo Koh), Lamar University; Памела Лоухед (Pamela Lawhead), The University of Mississippi; Стивен П. Лич (Stephen P. Leach), Florida State University; Марк ЛеБланк (Mark LeBlanc), Wheaton College; Мей-Линг Л. Ли (Mei-Ling L. Liu), California Polytechnic State University, San Luis Obispo; Энди Лопеc (Andy Lopez), University of Minnesota, Morris; Мэрилин Лузер (Marilyn Loser), Adams State College; Е. Терри Мейджел (E. Terry Magel), Kentucky State University; Патрисия Нетнин (Patricia Nettnin), Finger Lakes Community College; Дебора Нунан (Deborah Noonan), College of William and Mary; Линн Олсон (Lynn Olson), Wartburg College; Бобби Энн Осмер (Bobbie Ann Othmer), Westminster College of Salt Lake City; Парвиc Партоу (Parviz Partow), California State University, Los Angeles; Холли Паттерсон (Holly Patterson), Texas A&M University, Corpus Christi; Ховард Д. Пирон (Howard D. Pyron), University of Missouri, Rolla; Джозеф Т. Риарз (Joseph T. Rears), The College of New Jersey; Роберт Страдер (Robert Strader), Stephen F. Austin State University; К. Д. Саммерхейз (K. D. Summerhays), University of San Francisco. Мы также благодарим Дэйва Джеггиза (Dave Geggis), нашего редактора в изда тельстве Jones and Bartlett, технического редактора Карен Джоули (Karen Jolie), а также Джоан Флахерти (Joan Flaherty) и Дженни Баджижьян (Jenny Bagdigian), которые руководили производством этой книги. Тот, кто хоть раз в жизни писал книгу (или состоит в родстве с кем-нибудь пишущим), может оценить, сколько времени отнимает это занятие. Огромное спасибо нашим семьям – семье Дэйла и всем его родственникам (слишком многочисленным, чтобы их перечислить); Лизе, Чарли и Эбби; Энни, Брэди и Кэри – спасибо вам всем за ваше неистощимое терпение и снисходительность. Нелл Дэйл (Nell Dale) Чип Уимз (Chip Weems) Марк Хедингтон (Mark Headington) Предисловие
Программный диск для книги «Программирование на С++» Издательство Jones and Bartlett Publishers предлагает учащимся и преподавателям бесплатную копию программного диска с полным текстом программ, содержащихся в книге «Программирование на С++». Диск можно найти на Web-узле Jones and Bartlett в Internet.1 Как скопировать программный диск: Подключитесь к Web-странице, на которой размещен программный диск (http://www.jbpub.com/disks/). Выберите «Programming in С++». Следуйте инструкциям по копированию и сохранению программного диска. 1 Для того чтобы скопировать диск «Программирование на С++» с Web-узла Jones and Bartlett, требуется подключение компьютера ко Всемирной сети и наличие на нем Web-браузера, например Netscape Navigator или Microsoft Internet Explorer. Издательство Jones and Bartlett разрешает тем, кто установил диск «Программирование на С++» на своем компьютере, беспрепятственно копировать этот диск или хранить его файлы на любом автономном или сетевом компьютере. Предисловие