• Название:

    С Павловская Программирование на языке высоко...


  • Размер: 10.08 Мб
  • Формат: PDF
  • или
  • Сообщить о нарушении / Abuse

Установите безопасный браузер



    Предпросмотр документа

    / /

    ^ . . / ^

    .....^

    ••:.•••

    г.-!-...•-.

    Т, А. Павловская

    C/C++
    Программирование
    на языке высокого уровня
    Допущено Министерством образования Российской Федерации
    в качестве учебника для студентов высших учебных
    заведений, обучающихся по направлению
    «Информатика и вычислительная техника»

    3004^
    300.piter.com

    Издательская программа

    300 лучших учебников для высшей школы
    в честь 300-летия Санкт-Петербурга
    осуществляется при поддержке Министерства образования РФ

    1;^пптЕР'
    Москва • Санкт-Петербург • Нижний Новгород • Воронеж
    Ростов-на-Дону • Екатеринбург • Самара
    Киев • Харьков • Минск

    2003

    ББК 32.973-018я7
    УДК 681.3.06(075)
    П12

    Рецензенты:
    Ревунков Г. И., кандидат технических наук, доцент, декан факультета информатики
    и систем управления МГТУ им. Н. Э. Баумана
    Варлинский Н. Н., кандидат технических наук, доцент кафедры МО ЭВМ
    Санкт-Петербургского электротехнического университета
    Фомичев B.C., доктор технических наук, профессор кафедры вычислительной техники
    Санкт-Петербургского электротехнического университета

    П12

    C/C++. Программирование на языке высокого уровня / Т. А. Павловская. — СПб.:
    Питер, 2003. —461 с: ил.
    ISBN 5-94723-568-4
    Задача этой книги — дать краткое и четкое изложение языка C++ в соответствии со стандар­
    том ISO/IEC 14882. Она предназначена для студентов, изучающих язык «с нуля», но будет полезна
    и более искушенным в программировании. Цель, которая ставилась при написании книги — дать
    правильное представление о возможностях языка C++ и способах их применения, толчок к даль­
    нейшему изучению этого и других языков программирования и ключ к пониманию современных
    объектно-ориентированных технологий.
    Контрольные задания по ключевым темам представлены в 20 вариантах, и автор надеется, что
    преподаватели оценят проявленную о них заботу.

    ББК 32.973-018я7
    УДК 681.3.06(075)

    ISBN 5-94723-568-4

    © ЗАО Издательский дом «Питер», 2003

    Краткое содержание
    Предисловие
    Часть

    I. Структурное программирование

    11
    13

    Глава 1 . Базовые средства языка C++

    15

    Глава 2. Модульное программирование

    72

    Глава 3. Технология создания программ

    102

    Упражнения к части 1

    128

    Часть II. Объектно-ориентированное программирование

    173

    Глава 4. Классы

    178

    Глава 5. Наследование

    200

    Глава 6. Шаблоны классов

    211

    Глава 7. Обработка исключительных ситуаций

    222

    Глава 8. Преобразования типов

    231

    Глава 9. Рекомендации по программированию

    241

    Упражнения к части И

    248

    Часть III. Стандартная библиотека

    263

    Глава 10. Потоковые классы

    265

    Глава 1 1 . Строки

    286

    Глава 12. Контейнерные классы

    295

    Глава 13. Итераторы и функциональные объекты

    328

    Глава 14. Алгоритмы

    343

    Глава 15. Средства для численных расчетов

    ^. 369

    Глава 16. Другие средства стандартной библиотеки

    378

    Упражнения к части III

    381

    Послесловие

    382

    Литература

    383

    Приложение 1 . Операции языка C++

    384

    Приложение 2. Спецификации формата для функций семейства printf

    387

    Приложение 3. Арифметические преобразования типов

    390

    Приложение 4. Заголовочные файлы стандартной библиотеки

    391

    Приложение 5. Константы, макросы и типы данных стандартной библиотеки . . 394
    Приложение 6. Функции стандартной библиотеки

    409

    Приложение?. Таблицы кодов ASCII

    447

    Алфавитный указатель

    450

    Содержание
    Предисловие

    11

    Часть!. Структурное программирование

    13

    Глава 1 . Базовые средства языка C++

    15

    Состав языка
    Алфавит языка
    Идентификаторы
    Ключевые слова
    Знаки операций
    Константы
    Комментарии
    Типы данных C++
    Концепция типа данных
    Основные типы данных
    Структура программы
    Переменные и выражения
    Переменные
    Операции
    Выражения
    Базовые конструкции структурного программирования
    Оператор «выражение»
    Операторы ветвления
    Операторы цикла
    Операторы передачи управления
    Указатели и массивы
    Указатели
    Ссылки
    Массивы .
    Типы данных, определяемые пользователем
    Переименование типов (typedef)
    Перечисления (enum)
    Структуры (struct)
    Объединения (union)

    15
    17
    18
    19
    19
    20
    22
    22
    22
    .23
    26
    28
    28
    31
    37
    38
    40
    40
    44
    49
    51
    51
    58
    58
    65
    65
    66
    67
    69

    Содержание
    Глава 2 . Модульное программирование

    72

    Функции
    Объявление и определение функций
    Глобальные переменные
    Возвращаемое значение
    Параметры функции
    Рекурсивные функции
    Перегрузка функций
    Шаблоны функций
    Функция mainO
    Функции стандартной библиотеки
    Директивы препроцессора
    Директива #inclucle
    Директива #clefine
    Директивы условной компиляции
    Директива #undef
    Области действия идентификаторов
    Внешние объявления
    Поименованные области

    73
    73
    76
    76
    77
    82
    83
    85
    87
    88
    93
    93
    94
    95
    96
    97
    98
    99

    Глава 3 . Технология создания программ

    102

    Кодирование и документирование программы

    102

    Проектирование и тестирование программы

    109

    Динамические структуры данных
    Линейные списки
    Стеки
    Очереди
    Бинарные деревья
    Реализация динамических структур с помощью массивов

    114
    115
    119
    121
    122
    126

    У п р а ж н е н и я к части 1

    128

    Циклические вычислительные процессы
    Одномерные массивы
    Двумерные массивы
    Одномерные и двумерные массивы
    Структуры
    Указатели
    Простейшие функции
    Функции и файлы
    Функции библиотеки для работы со строками и символами
    Шаблоны функций
    Модульное программирование
    Динамические структуры данных

    128
    136
    139
    142
    144
    151
    151
    151
    159
    165
    165
    165

    Содержание

    Часть I I . Объектно-ориентированное программирование

    173

    Глава 4 . Классы

    178

    Описание класса
    Описание объектов
    Указатель this
    Конструкторы
    Конструктор копирования
    Статические элементы класса
    Статические поля
    Статические методы
    Дружественные функции и классы
    Дружественная функция
    Дружественный класс
    Деструкторы
    Перегрузка операций
    Перегрузка унарных операций
    Перегрузка бинарных операций
    Перегрузка операции присваивания
    Перегрузка операций new и delete
    Перегрузка операции приведения типа
    Перегрузка операции вызова функции
    Перегрузка операции индексирования
    Указатели на элементы классов
    Рекомендации по составу класса

    178
    180
    181
    182
    184
    185
    186
    186
    187
    187
    188
    188
    189
    190
    191
    191
    192
    195
    195
    196
    197
    198

    ;

    г

    Глава 5 . Наследование

    200

    Ключи доступа
    Простое наследование
    Виртуальные методы
    Механизм позднего связывания
    Абстрактные классы
    Множественное наследование
    Отличия структур и объединений от классов

    200
    201
    205
    207
    208
    208
    209

    Глава 6 . Шаблоны классов

    211

    Создание шаблонов классов
    Использование шаблонов классов
    Специализация шаблонов классов
    Достоинства и недостатки шаблонов

    211
    219
    220
    221

    Глава 7 . Обработка исключительных ситуаций

    222

    Общий механизм обработки исключений
    Синтаксис исключений

    223
    223

    Содержание
    Перехват исключений
    Список исключений функции
    Исключения в конструкторах и деструкторах

    225
    227
    228

    Иерархии исключений

    229

    Глава 8 . Преобразования типов

    231

    Операция приведения типов в стиле С

    231

    Операция const^cast

    232

    Операция clynamic_cast
    Повышающее преобразование
    Понижающее преобразование
    Преобразование ссылок
    Перекрестное преобразование

    232
    233
    233
    235
    236

    Операция static_cast

    237

    Операция reinterpret_cast
    Динамическое определение типа

    238
    238

    Глава 9 . Рекомендации по программированию

    241

    У п р а ж н е н и я к части II

    248

    Классы
    Наследование
    Шаблоны классов

    248
    252
    260

    Часть i l l . Стандартная библиотека

    263

    Глава 1 0 . Потоковые классы

    265

    Стандартные потоки

    267

    Форматирование данных
    Флаги и форматирующие методы
    Манипуляторы

    269
    269
    271

    Методы обмена с потоками

    273

    Ошибки потоков

    278

    Файловые потоки

    280

    Строковые потоки

    282

    Потоки и типы, определенные пользователем

    284

    Глава 1 1 . Строки

    286

    Конструкторы и присваивание строк
    Операции

    287
    288

    8

    Содержание

    Функции
    Присваивание и добавление частей строк
    Преобразования строк
    Поиск подстрок
    Сравнение частей строк
    Получение характеристик строк

    288
    288
    289
    291
    293
    294

    Глава 1 2 . Контейнерные классы

    295

    Последовательные контейнеры
    Векторы (vector)
    Двусторонние очереди (deque)
    Списки (list)
    Стеки (stack)
    Очереди (queue)
    Очереди с приоритетами (priority__queue)
    Ассоциативные контейнеры
    Словари (тар)
    Словари с дубликатами (multimap)
    Множества (set)
    Множества с дубликатами (multiset)
    Битовые множества (bitset)
    Пример использования контейнеров

    297
    299
    304
    306
    310
    311
    313
    315
    316
    321
    321
    323
    323
    325

    Глава 1 3 . Итераторы и функциональные объекты

    328

    Итераторы
    Обратные итераторы
    Итераторы вставки
    Потоковые итераторы
    Функциональные объекты
    Арифметические функциональные объекты
    Предикаты
    Отрицатели
    Связыватели
    Адаптеры указателей на функции
    Адаптеры методов

    328
    331
    332
    333
    334
    335
    336
    337
    337
    338
    341

    Глава 1 4 . Алгоритмы

    343

    Немодифицирующие операции с последовательностями
    adjacent_find
    count, countjf
    equal
    find, findjf
    find_first_of
    find_end
    for each

    344
    345
    345
    346
    346
    347
    347
    347

    Содержание

    9

    mismatch
    search, search_n
    Модифицирующие операции с последовательностями
    сору, copy_backward
    fill,filLn
    generate, generate_n
    jter_swap, swap, swap_ranges
    random^shuffle
    remove, removejf, remove__copy, remove_copy_lf
    replace, replacejf, replace_copy, replace__copyJf
    reverse, reverse^copy
    rotate, rotate__copy
    transform
    unique, unique^copy
    Алгоритмы, связанные с сортировкой
    binary^search
    equal__range
    inplace_merge
    lexicographical_compare
    lower_bound, upper^bound
    max, min
    max_element, min_element
    merge
    next^permutation, prev_permutation
    nth_element
    partial^ sort, partial_sort_copy
    partition, stable_partition
    sort, stable_sort
    Алгоритмы работы с множествами и пирамидами
    includes
    setjntersection
    set_difference, set__symmetric_difference
    set_union
    Пример использования алгоритмов работы с множествами
    make^heap
    pop_heap
    push^heap
    sort_heap

    348
    348
    348
    350
    351
    351
    352
    352
    353
    354
    355
    355
    356
    357
    357
    358
    359
    359
    359
    360
    360
    360
    361
    361
    362
    363
    363
    364
    364
    365
    365
    366
    366
    366
    367
    368
    368
    368

    Глава 1 5 . Средства для численных расчетов

    369

    Обобщенные численные алгоритмы
    accumulate
    inner_product
    partiaLsum
    adjacent_difference

    369
    369
    370
    370
    371



    Содержание

    Класс valarray
    Вспомогательные классы

    371
    374

    Глава 16. Другие средства стандартной библиотеки

    378

    Упражнения к части III

    381

    Послесловие

    382

    Литература

    383

    Приложение 1 . Операции языка C++

    384

    Приложение 2. Спецификации формата
    для функций семейства printf

    387

    Приложение 3. Арифметические преобразования типов

    390

    Приложение 4. Заголовочные файлы стандартной библиотеки

    391

    Приложение 5. Константы, макросы и тмпы данных
    стандартной библиотеки

    394

    Приложение 6. Функции стандартной библиотеки

    409

    Состав заголовочных файлов
    Алфавитный перечень функций

    409
    416

    Приложение?. Таблицы кодов ASCII

    447

    Алфавитный указатель

    450

    Предисловие
    Задача этой книги — дать краткое и четкое изложение языка C++ в соответствии
    со стандартом ISO/IEC 14882 (1998) без легковесности и фрагментарности
    серии «Для чайников» и без пространных рассуждений о нюансах, важность ко­
    торых становится очевидной только после приобретения опыта программирова­
    ния. Книга предназначена для студентов, изучающих язык «с нуля», но будет по­
    лезна и более искушенным в программировании. Можно рассматривать ее как
    конспект лекций или большую шпаргалку.
    Книга не претендует на полноту изложения материала, для этого существуют
    справочники, документация и контекстная помощь. Цель, которая ставилась при
    ее написании, — дать правильное представление о возможностях языка C++ и
    способах их применения, а также толчок к дальнейшему изучению этого и дру­
    гих языков программирования.
    Кроме конструкций языка, в книге рассматриваются основные структуры дан­
    ных, используемые при написании программ, критерии качества программ, а так­
    же рекомендации по стилю и технологии программирования.
    Вот что написал о важности дисциплины программирования создатель C++
    Б. Страуструп: «Вы можете написать небольшую программу (скажем, 1000 строк),
    используя грубую силу и нарушая все правила хорошего стиля. Для программ
    большего размера вы не сможете это сделать. Если структура программы, состоя­
    щей из 100 000 строк, плоха, вы обнаружите, что новые ошибки появляются с той
    же скоростью, с которой исправляются старые. C++ разрабатывался таким обра­
    зом, чтобы предоставить возможность рационально структурировать большие
    программы, и чтобы один человек мог работать с большим объемом кода».
    Более трети книги посвящено обзору стандартной библиотеки — инструмента,
    которым должен владеть каждый профессиональный программист для уменьше­
    ния сроков разработки программ и повышения их надежности, переносимости и
    универсальности.
    В книге не рассматривается программирование под Windows и другие среды, по­
    этому все примеры представляют собой так называемые «консольные приложе­
    ния». Синтаксис примеров соответствует стандарту C++, поэтому некоторые из
    них могут не компилироваться в оболочках, выпущенных до его утверждения.
    Книга состоит из трех частей: «Структурное программирование», «Объектноориентированное программирование» и «Стандартная библиотека».

    12

    предисловие

    В первой части рассматриваются основные конструкции языка и базовая техно­
    логия создания программ, отвечающих современным требованиям качества и на­
    дежности.
    Вторая часть посвящена описанию средств языка, позволяющих успешно созда­
    вать программы большого объема — классов, наследования, шаблонов и исклю­
    чений. Материал этой части необходим также для освоения стандартной библио­
    теки.
    В третьей части дано описание средств стандартной библиотеки С+-ь. Рассматри­
    ваются потоки, контейнеры, итераторы, векторы, стандартные алгоритмы и связи
    между ними.
    Определения синтаксических элементов языка выделены в тексте книги полу­
    жирным шрифтом.
    В приложениях содержится большое количество справочной информации, необ­
    ходимой при написании любой программы.
    Все ключевые слова, типы, константы, функции, макросы и классы, описанные
    в книге, можно найти по предметному указателю, что позволяет использовать ее
    и как справочник. Для удобства пользования после имени элемента в строке ука­
    зателя через запятую приведено имя класса, к которому принадлежит данный
    элемент, или пояснение.
    Пользуясь случаем, хочу выразить глубокую благодарность моим первым препо­
    давателям программирования П. А. Шипилову и Г. Л. Голованевскому, сотруд­
    нику издательства «Питер» А. В. Васильеву, коллегам А. В. Лаздину, Ю. А. Щупаку и И. Яковлеву, всем корифеям, упомянутым в списке литературы, а также
    моим родителям и сыну Евгению, нарисовавшему картинки.
    Книга поддержана проектом «Разработка