Главная страница

Бьерн Страуструп. Язык программирования С Второе дополненное издание


Скачать 2.87 Mb.
НазваниеБьерн Страуструп. Язык программирования С Второе дополненное издание
Дата30.01.2020
Размер2.87 Mb.
Формат файлаpdf
Имя файлаStraustrup-Yazyk_programmirovaniya_c.pdf
ТипДокументы
#106559
страница1 из 35
  1   2   3   4   5   6   7   8   9   ...   35

Бьерн Страуструп.
Язык программирования С++
Второе дополненное издание
Языки программирования / С++

Бьерн Страуструп.
Язык программирования С++
2
Оглавление
Оглавление
Оглавление
Оглавление
ПРЕДВАРИТЕЛЬНЫЕ ЗАМЕЧАНИЯ..................................................................................................................8
Об авторе книги: ..............................................................................................................................................8
ПРЕДИСЛОВИЕ...................................................................................................................................................9
Выражение признательности .......................................................................................................................10
ПРЕДИСЛОВИЕ К ПЕРВОМУ ИЗДАНИЮ ......................................................................................................11
Выражение признательности .......................................................................................................................11
ПРЕДВАРИТЕЛЬНЫЕ ЗАМЕЧАНИЯ................................................................................................................12
Структура книги............................................................................................................................................12
Замечания по реализации................................................................................................................................13
Упражнения....................................................................................................................................................13
Замечания по проекту языка..........................................................................................................................13
Историческая справка....................................................................................................................................14
Сравнение языков С++ и С.............................................................................................................................15
Эффективность и структура .......................................................................................................................16
Философские замечания .................................................................................................................................17
Замечания о программировании на языке С++ .............................................................................................18
Несколько полезных советов..........................................................................................................................19
Замечание для программистов на С ..............................................................................................................19
Список литературы .......................................................................................................................................20
ГЛАВА 1. КРАТКИЙ ОБЗОР С++ .....................................................................................................................22
1.1 ВВЕДЕНИЕ ...............................................................................................................................................22
1.2 Парадигмы программирования................................................................................................................22
1.2.1 Процедурное программирование.......................................................................................................23
1.2.2 Модульное программирование ..........................................................................................................24
1.2.3 Абстракция данных...........................................................................................................................25
1.2.4 Пределы абстракции данных ............................................................................................................27
1.2.5 Объектно-ориентированное программирование..............................................................................28
1.3 "Улучшенный С".......................................................................................................................................29
1.3.1 Программа и стандартный вывод ...................................................................................................29
1.3.2 Переменные и арифметические операции........................................................................................30
1.3.3 Указатели и массивы ........................................................................................................................31
1.3.4 Условные операторы и циклы...........................................................................................................31
1.3.5 Функции .............................................................................................................................................32
1.3.6 Модули ...............................................................................................................................................33
1.4 Поддержка абстракции данных..............................................................................................................35
1.4.1 Инициализация и удаление.................................................................................................................35
1.4.2 Присваивание и инициализация .........................................................................................................36
1.4.3 Шаблоны типа ..................................................................................................................................37
1.4.4 Обработка особых ситуаций............................................................................................................37
1.4.5 Преобразования типов......................................................................................................................38
1.4.6 Множественные реализации ............................................................................................................39
1.5 Поддержка объектно-ориентированного программирования ................................................................40
1.5.1 Механизм вызова ...............................................................................................................................40
1.5.2 Проверка типа...................................................................................................................................41
1.5.3 Множественное наследование..........................................................................................................42
1.5.4 Инкапсуляция.....................................................................................................................................43
1.6 Пределы совершенства............................................................................................................................44
ГЛАВА 2. ОПИСАНИЯ И КОНСТАНТЫ ...........................................................................................................46
2.1 ОПИСАНИЯ.............................................................................................................................................46
2.1.1 Область видимости ..........................................................................................................................47
2.1.2 Объекты и адреса .............................................................................................................................48
2.1.3 Время жизни объектов .....................................................................................................................48
2.2 ИМЕНА.....................................................................................................................................................49
2.3 ТИПЫ.......................................................................................................................................................49

Бьерн Страуструп.
Язык программирования С++
3
2.3.1 Основные типы .................................................................................................................................50
2.3.2 Неявное преобразование типа ..........................................................................................................51
2.3.3 Производные типы............................................................................................................................52
2.3.4 Тип void..............................................................................................................................................52
2.3.5 Указатели..........................................................................................................................................53
2.3.6 Массивы.............................................................................................................................................53
2.3.7 Указатели и массивы ........................................................................................................................55
2.3.8 Структуры........................................................................................................................................56
2.3.9 Эквивалентность типов ...................................................................................................................58
2.3.10 Ссылки .............................................................................................................................................59
2.4 ЛИТЕРАЛЫ..............................................................................................................................................61
2.4.1 Целые константы .............................................................................................................................61
2.4.2 Константы с плавающей точкой.....................................................................................................62
2.4.3 Символьные константы ...................................................................................................................62
2.4.4 Строки...............................................................................................................................................63
2.4.5 Нуль....................................................................................................................................................63
2.5 Поименованные константы....................................................................................................................64
2.5.1. Перечисления ....................................................................................................................................65
2.6. Экономия памяти ....................................................................................................................................66
2.6.1 Поля ...................................................................................................................................................66
2.6.2. Объединения ......................................................................................................................................67
2.7 Упражнения .............................................................................................................................................68
ГЛАВА 3. ВЫРАЖЕНИЯ И ОПЕРАТОРЫ ........................................................................................................70
3.1 Калькулятор.............................................................................................................................................70
3.1.1 Анализатор.........................................................................................................................................70
3.1.2 Функция ввода ...................................................................................................................................74
3.1.3 Таблица имен.........................................................................................................................................76
3.1.4 Обработка ошибок............................................................................................................................77
3.1.5 Драйвер..............................................................................................................................................78
3.1.6 Параметры командной строки ........................................................................................................79
3.2 Сводка операций ......................................................................................................................................79
3.2.1 Скобки................................................................................................................................................83
3.2.2 Порядок вычислений..........................................................................................................................83
3.2.3 Инкремент и декремент ...................................................................................................................84
3.2.4 Поразрядные логические операции....................................................................................................85
3.2.5 Преобразование типа........................................................................................................................86
3.2.6 Свободная память.............................................................................................................................87
3.3 Сводка операторов...................................................................................................................................90
3.3.1 Выбирающие операторы ..................................................................................................................90
3.3.2 Оператор goto ...................................................................................................................................92
3.4 Комментарии и расположение текста ...................................................................................................93
3.5 Упражнения..............................................................................................................................................94
ГЛАВА 4..............................................................................................................................................................97
4.1 Введение ....................................................................................................................................................97
4.2 Связывание................................................................................................................................................97
4.3 Заголовочные файлы .................................................................................................................................99
4.3.1 Единственный заголовочный файл .................................................................................................. 100
4.3.2 Множественные заголовочные файлы ............................................................................................ 102
4.4 Связывание с программами на других языках........................................................................................ 104
4.5 Как создать библиотеку ........................................................................................................................ 105
4.6 Функции................................................................................................................................................... 106
4.6.1 Описания функций............................................................................................................................ 106
4.6.2 Определения функций....................................................................................................................... 107
4.6.3 Передача параметров...................................................................................................................... 107
4.6.4 Возвращаемое значение.................................................................................................................... 109

Бьерн Страуструп.
Язык программирования С++
4
4.6.5 Параметр-массив............................................................................................................................. 110
4.6.6 Перегрузка имени функции............................................................................................................... 111
4.6.7 Стандартные значения параметров............................................................................................... 113
4.6.8 Неопределенное число параметров.................................................................................................. 114
4.6.9 Указатель на функцию..................................................................................................................... 115
4.7 Макросредства ....................................................................................................................................... 118
4.8 Упражнения............................................................................................................................................ 120
5. КЛАССЫ....................................................................................................................................................... 122
5.1 Введение и краткий обзор....................................................................................................................... 122
5.2 Классы и члены........................................................................................................................................ 123
5.2.1 Функции-члены ..................................................................................................................................... 123
5.2.2 Классы .............................................................................................................................................. 123
5.2.3 Ссылка на себя.................................................................................................................................. 124
5.2.4 Инициализация.................................................................................................................................. 127
5.2.5 Удаление ........................................................................................................................................... 128
5.2.6 Подстановка .................................................................................................................................... 129
5.3 Интерфейсы и реализации...................................................................................................................... 129
5.3.1 Альтернативные реализации ........................................................................................................... 130
5.3.2 Законченный пример класса ............................................................................................................. 132
5.4 Еще о классах.......................................................................................................................................... 135
5.4.1 Друзья ............................................................................................................................................... 135
5.4.2 Уточнение имени члена.................................................................................................................... 136
5.4.3 Вложенные классы ........................................................................................................................... 137
5.4.4 Статические члены ......................................................................................................................... 138
5.4.5 Указатели на члены.......................................................................................................................... 139
5.4.6 Структуры и объединения............................................................................................................... 139
5.5 Конструкторы и деструкторы ............................................................................................................. 142
5.5.1 Локальные переменные .................................................................................................................... 142
5.5.2 Статическая память....................................................................................................................... 143
5.5.3 Свободная память............................................................................................................................ 144
5.5.4 Объекты класса как члены............................................................................................................... 144
5.5.5 Массивы объектов класса................................................................................................................ 146
5.5.6 Небольшие объекты......................................................................................................................... 146
5.6 Упражнения............................................................................................................................................ 147
ГЛАВА 6............................................................................................................................................................ 149
6.1 Введение и краткий обзор....................................................................................................................... 149
6.2 Производные классы ............................................................................................................................... 149
6.2.1 Функции-члены ................................................................................................................................. 151
6.2.2 Конструкторы и деструкторы....................................................................................................... 152
6.2.3 Иерархия классов.............................................................................................................................. 153
6.2.4 Поля типа......................................................................................................................................... 153
6.2.5 Виртуальные функции...................................................................................................................... 155
6.3 Абстрактные классы.............................................................................................................................. 156
6.4 Пример законченной программы ............................................................................................................ 158
6.4.1 Монитор экрана............................................................................................................................... 158
6.4.2 Библиотека фигур ............................................................................................................................ 160
6.4.3 Прикладная программа .................................................................................................................... 162
6.5 Множественное наследование ............................................................................................................... 164
6.5.1 Множественное вхождение базового класса.................................................................................. 165
6.5.2 Разрешение неоднозначности.......................................................................................................... 165
6.5.3 Виртуальные базовые классы .......................................................................................................... 167
6.6 Контроль доступа.................................................................................................................................. 171
6.6.1 Защищенные члены........................................................................................................................... 171
6.6.2 Доступ к базовым классам............................................................................................................... 173
6.7 Свободная память .................................................................................................................................. 174

Бьерн Страуструп.
Язык программирования С++
5
6.7.1 Виртуальные конструкторы ........................................................................................................... 175
6.7.2 Указание размещения....................................................................................................................... 178
6.8 Упражнения............................................................................................................................................ 179
ГЛАВА 7............................................................................................................................................................ 181
7.1 Введение .................................................................................................................................................. 181
7.2 Операторные функции ........................................................................................................................... 181
7.2.1 Бинарные и унарные операции ......................................................................................................... 182
7.2.2 Предопределенные свойства операций............................................................................................ 183
7.2.3 Операторные функции и пользовательские типы .......................................................................... 183
7.3 Пользовательские операции преобразования типа ............................................................................... 184
7.3.1 Конструкторы ................................................................................................................................. 184
7.3.2 Операции преобразования ................................................................................................................ 186
7.3.3 Неоднозначности ............................................................................................................................. 187
7.4 Литералы................................................................................................................................................ 189
7.5 Большие объекты ................................................................................................................................... 189
7.6 Присваивание и инициализация............................................................................................................... 190
7.7 Индексация.............................................................................................................................................. 192
7.8 Вызов функции ........................................................................................................................................ 194
7.9 Косвенное обращение.............................................................................................................................. 195
7.10 Инкремент и декремент....................................................................................................................... 196
7.11 Строковый класс................................................................................................................................... 198
7.12 Друзья и члены....................................................................................................................................... 200
7.13 Предостережения ................................................................................................................................ 201
7.14 Упражнения .......................................................................................................................................... 201
ГЛАВА 8. ШАБЛОНЫ ТИПА .......................................................................................................................... 204
8.1 Введение .................................................................................................................................................. 204
8.2 Простой шаблон типа............................................................................................................................ 204
8.3 Шаблоны типа для списка...................................................................................................................... 206
8.3.1 Список с принудительной связью..................................................................................................... 207
8.3.2 Список без принудительной связи.................................................................................................... 209
8.3.3 Реализация списка ............................................................................................................................ 212
8.3.4 Итерация.......................................................................................................................................... 213
8.4 Шаблоны типа для функций................................................................................................................... 215
8.4.1 Простой шаблон типа для глобальной функции ............................................................................. 216
8.4.2 Производные классы позволяют ввести новые операции ............................................................... 217
8.4.3 Передача операций как параметров функций ................................................................................. 218
8.4.4 Неявная передача операций ............................................................................................................. 219
8.4.5 Введение операций с помощью параметров шаблонного класса .................................................... 219
8.5 Разрешение перегрузки для шаблонной функции.................................................................................... 221
8.6 Параметры шаблона типа..................................................................................................................... 222
8.7 Шаблоны типа и производные классы ................................................................................................... 224
8.7.1 Задание реализации с помощью параметров шаблона.................................................................... 225
8.8 Ассоциативный массив........................................................................................................................... 225
8.9 Упражнения............................................................................................................................................ 231
ГЛАВА 9............................................................................................................................................................ 232
9.1 Обработка ошибок ................................................................................................................................. 232
9.1.1 Особые ситуации и традиционная обработка ошибок .................................................................. 234
9.1.2 Другие точки зрения на особые ситуации....................................................................................... 235
9.2 Различение особых ситуаций.................................................................................................................. 235
9.3 Имена особых ситуаций ......................................................................................................................... 237
9.3.1 Группирование особых ситуаций..................................................................................................... 238
9.3.2 Производные особые ситуации........................................................................................................ 240
9.4 Запросы ресурсов .................................................................................................................................... 243
9.4.1 Конструкторы и деструкторы....................................................................................................... 244
9.4.2 Предостережения............................................................................................................................ 246

Бьерн Страуструп.
Язык программирования С++
6
9.4.3 Исчерпание ресурса.......................................................................................................................... 246
9.4.4 Особые ситуации и конструкторы ................................................................................................. 248
9.5 Особые ситуации могут не быть ошибками......................................................................................... 249
9.6 Задание интерфейса............................................................................................................................... 251
9.6.1 Неожиданные особые ситуации...................................................................................................... 252
9.7 Неперехваченные особые ситуации........................................................................................................ 253
9.8 Другие способы обработки ошибок ....................................................................................................... 254
9.9 Упражнения............................................................................................................................................ 256
ГЛАВА 10. ПОТОКИ......................................................................................................................................... 257
10.1 ВВЕДЕНИЕ........................................................................................................................................... 257
10.2 ВЫВОД.................................................................................................................................................. 258
10.2.1 Вывод встроенных типов............................................................................................................... 259
10.2.2 Вывод пользовательских типов ..................................................................................................... 260
10.3 ВВОД ..................................................................................................................................................... 261
10.3.1 Ввод встроенных типов ................................................................................................................. 261
10.3.2 Состояния потока ......................................................................................................................... 263
10.3.3 Ввод пользовательских типов........................................................................................................ 265
10.4 Форматирование .................................................................................................................................. 266
10.4.1 Класс ios.......................................................................................................................................... 266
10.4.1.1 Связывание потоков ................................................................................................................ 266
10.4.1.2 Поля вывода ............................................................................................................................. 267
10.4.1.3 Состояние формата ............................................................................................................... 268
10.4.1.4 Вывод целых............................................................................................................................. 269
10.4.1.5 Выравнивание полей................................................................................................................. 270
10.4.1.6 Вывод плавающих чисел........................................................................................................... 270
10.4.2 Манипуляторы................................................................................................................................ 271
10.4.2.1 Стандартные манипуляторы ввода-вывода .......................................................................... 273
10.4.3 Члены ostream................................................................................................................................. 274
10.4.4 Члены istream.................................................................................................................................. 275
10.5 Файлы и потоки .................................................................................................................................... 275
10.5.1 Закрытие потоков ......................................................................................................................... 276
10.5.2 Строковые потоки......................................................................................................................... 277
10.5.3 Буферизация ................................................................................................................................... 278
10.6 Ввод-вывод в С ...................................................................................................................................... 279
10.7 Упражнения .......................................................................................................................................... 281
ГЛАВА 11. ПРОЕКТИРОВАНИЕ И РАЗВИТИЕ............................................................................................. 283
11.1 Введение ................................................................................................................................................ 283
11.2 Цели и средства .................................................................................................................................... 285
11.3 Процесс развития ................................................................................................................................. 287
11.3.1 Цикл развития ................................................................................................................................ 289
11.3.2 Цели проектирования..................................................................................................................... 290
11.3.3 Шаги проектирования.................................................................................................................... 291
11.3.3.1 Шаг 1: определение классов .................................................................................................... 292
11.3.3.2 Шаг 2: определение набора операций ..................................................................................... 293
11.3.3.3 Шаг 3: указание зависимостей ............................................................................................... 294
11.3.3.4 Шаг 4: определение интерфейсов ........................................................................................... 294
11.3.3.5 Перестройка иерархии классов ............................................................................................... 295
11.3.3.6 Использование моделей............................................................................................................ 295
11.3.4 Эксперимент и анализ.................................................................................................................... 296
11.3.5 Тестирование.................................................................................................................................. 298
11.3.6 Сопровождение .............................................................................................................................. 298
11.3.7 Эффективность............................................................................................................................. 299
11.4 Управление проектом ........................................................................................................................... 299
11.4.1 Повторное использование .............................................................................................................. 299
11.4.2 Размер............................................................................................................................................. 301

Бьерн Страуструп.
Язык программирования С++
7
11.4.3 Человеческий фактор..................................................................................................................... 302
11.5 Свод правил ........................................................................................................................................... 303
11.6 Список литературы с комментариями................................................................................................ 304
ГЛАВА 12. ПРОЕКТИРОВАНИЕ И С++......................................................................................................... 306
12.1 Проектирование и язык программирования......................................................................................... 306
12.1.1 Игнорирование классов................................................................................................................... 307
12.1.2 Игнорирование наследования ......................................................................................................... 309
12.1.3 Игнорирование статического контроля типов ............................................................................ 309
12.1.4 Гибридный проект.......................................................................................................................... 312
12.2 Классы................................................................................................................................................... 314
12.2.1 Что представляют классы?.......................................................................................................... 315
12.2.2 Иерархии классов............................................................................................................................ 316
12.2.3 Зависимости в рамках иерархии классов....................................................................................... 318
12.2.4 Отношения принадлежности........................................................................................................ 319
12.2.5 Принадлежность и наследование .................................................................................................. 321
12.2.6 Отношения использования............................................................................................................. 324
12.2.7 Отношения внутри класса............................................................................................................. 325
12.2.7.1 Инварианты............................................................................................................................. 326
12.2.7.2 Инкапсуляция ........................................................................................................................... 328
12.2.8 Программируемые отношения....................................................................................................... 328
12.3 Компоненты.......................................................................................................................................... 330
12.4 Интерфейсы и реализации.................................................................................................................... 332
12.5 Свод правил ........................................................................................................................................... 334
ГЛАВА 13. ПРОЕКТИРОВАНИЕ БИБЛИОТЕК.............................................................................................. 335
13.1 Введение ................................................................................................................................................ 335
13.2 Конкретные типы ................................................................................................................................ 336
13.3 Абстрактные типы.............................................................................................................................. 338
13.4 Узловые классы ..................................................................................................................................... 342
13.5 Динамическая информация о типе....................................................................................................... 344
13.5.1 Информация о типе ....................................................................................................................... 346
13.5.2 Класс Type_info............................................................................................................................... 347
13.5.3 Как создать систему динамических запросов о типе................................................................... 349
13.5.4 Расширенная динамическая информация о типе .......................................................................... 350
13.5.5 Правильное и неправильное использование динамической информации о типе...................... 350
13.6 Обширный интерфейс .......................................................................................................................... 351
13.7 Каркас области приложения................................................................................................................ 354
13.8 Интерфейсные классы.......................................................................................................................... 355
13.9 Управляющие классы ............................................................................................................................ 358
13.10 Управление памятью .......................................................................................................................... 361
13.10.1 Сборщик мусора ........................................................................................................................... 362
13.10.2 Контейнеры и удаление................................................................................................................ 363
13.10.3 Функции размещения и освобождения......................................................................................... 366
13.11 Упражнения ........................................................................................................................................ 368

Бьерн Страуструп.
Язык программирования С++
8
  1   2   3   4   5   6   7   8   9   ...   35


написать администратору сайта