Author(s): Бьёрн Страуструп
Series: Классика computer science
Publisher: ДМК Пресс, Питер
Language: Russian
Commentary: 1146068297+OCR
Pages: 446
Предисловие......Page 13
Благодарности......Page 15
Обращение к читателю......Page 16
Часть 1......Page 29
1.1. Язык Simula и распределенные системы......Page 30
1.3. Немного об авторе книги......Page 33
2.1. Рождение С with Classes......Page 36
2.2. Обзор языковых возможностей......Page 38
2.3. Классы......Page 39
2.4. Эффективность исполнения......Page 41
2.4.1. Встраивание......Page 42
2.5. Модель компоновки......Page 43
2.5.1. Простые реализации......Page 46
2.5.2. Модель размещения объекта в памяти......Page 48
2.6. Статический контроль типов......Page 49
2.6.1. Сужающие преобразования......Page 50
2.6.2. О пользе предупреждений......Page 51
2.7. Почему С?......Page 52
2.8.1. Синтаксис объявлений в языке С......Page 54
2.8.2. Тэги структур и имена типов......Page 56
2.9. Производные классы......Page 58
2.9.1. Полиморфизм без виртуальных функций......Page 59
2.9.2. Контейнерные классы без шаблонов......Page 60
2.9.3. Модель размещения объекта в памяти......Page 61
2.10. Модель защиты......Page 62
2.11.1. Конструкторы и деструкторы......Page 65
2.11.2. Распределение памяти и конструкторы......Page 66
2.12.1. Перегрузка оператора присваивания......Page 67
2.12.2. Аргументы по умолчанию......Page 68
2.13. Что не реализовано в С with Classes......Page 69
2.14. Рабочая обстановка......Page 70
3.1. От С with Classes к C++......Page 73
3.2. Цели C++......Page 74
3.3. Компилятор Cfront......Page 76
3.3.1. Генерирование С-кода......Page 77
3.3.2. Синтаксический анализ C++......Page 79
3.3.4. Версии Cfront......Page 80
3.5. Виртуальные функции......Page 82
3.5.1. Модель размещения объекта в памяти......Page 85
3.5.3. Сокрытие членов базового класса......Page 87
3.6. Перегрузка......Page 88
3.6.1. Основы перегрузки......Page 89
3.6.2. Фуикции-члены и дружественные функции......Page 91
3.6.3. Операторные функции......Page 93
3.6.4. Перегрузка и эффективность......Page 94
3.7. Ссылки......Page 96
3.7.1. Lvalue и Rvalue......Page 98
3.8. Константы......Page 99
3.9. Управление памятью......Page 101
3.10. Контроль типов......Page 103
3.11.2. Нотация для конструкторов......Page 104
3.11.3. Квалификация......Page 105
3.11.4. Инициализация глобальных объектов......Page 106
3.11.5. Предложения объявления......Page 109
3.12. Языки С и C++......Page 111
3.13. Инструменты для проектирования языка......Page 114
3.14. Книга «Язык программирования C++»......Page 116
3.15. Статья «Whatis?»......Page 117
4.1. Правила и принципы......Page 120
4.2. Общие правила......Page 121
4.3. Правила поддержки проектирования......Page 125
4.4. Технические правила......Page 128
4.5. Правила поддержки низкоуровневого программирования......Page 132
4.6. Заключительное слово......Page 134
5.1. Введение......Page 135
5.2. Версия 2.0......Page 136
5.2.1. Обзор возможностей......Page 137
5.3. Аннотированное справочное руководство......Page 138
5.3.1. Обзор ARM......Page 139
5.4. Стандартизация ANSI и ISO......Page 140
5.4.1. Обзор возможностей......Page 143
6.1. Что такое стандарт?......Page 144
6.1.1. Детали реализации......Page 145
6.2. Работа комитета......Page 146
6.3. Как велась работа......Page 148
6.3.1. Разрешение имен......Page 149
6.3.2. Время жизни объектов......Page 153
6.4. Расширения......Page 157
6.4.1. Критерии рассмотрения предложений......Page 159
6.4.2. Текущее состояние дел......Page 161
6.4.3. Проблемы, связанные с полезными расширениями......Page 1 62
6.4.4. Логическая непротиворечивость......Page 163
6.5.1. Именованные аргументы......Page 164
6.5.2. Ограниченные указатели......Page 1 68
6.5.3. Наборы символов......Page 1 69
7.1. Рост интереса к C++......Page 174
7.1.2. Конференции......Page 175
7.1.3. Журналы и книги......Page 176
7.1.5. Инструментальные средства и среды программирования......Page 177
7.2. Преподавание и изучение C++......Page 178
7.3.1. Первые пользователи......Page 183
7.4. Коммерческая конкуренция......Page 184
7.4.1. Традиционные языки......Page 185
7.4.2. Современные языки......Page 186
7.4.3. Как выдержать конкуренцию......Page 187
8.2. Проектирование библиотеки C++......Page 189
8.2.2. Языковые средства и построение библиотеки......Page 190
8.2.3. Как работать с разнообразными библиотеками......Page 191
8.3. Ранние библиотеки......Page 192
8.3.1. Библиотеке потокового ввода/вывода......Page 193
8.3.2. Поддержка параллельности......Page 196
8.4. Другие библиотеки......Page 198
8.4.1. Базовые библиотеки......Page 199
8.4.3. Библиотеки для численных расчетов......Page 200
8.5. Стандартная библиотека......Page 201
9.2. Оценка пройденного пути......Page 203
9.2.2. Является ли C++ логически последовательным языком?......Page 204
9.2.3. Основная недоработка языка......Page 207
9.3.1. Мост нужен надолго......Page 208
9.3.2. Если C++ - это ответ, то на какой вопрос?......Page 209
9.4.3. Системные вопросы......Page 213
9.4.4. За пределами файлов и синтаксиса......Page 214
9.4.5. Подведение итогов и перспективы......Page 215
Часть II......Page 217
10.1.Введение......Page 218
10.2. Отделение распределения памяти и инициализации......Page 219
10.3. Выделение памяти для массива......Page 220
10.4. Размещение объекта в памяти......Page 221
10.5. Проблемы освобождения памяти......Page 222
10.5.1. Освобождение памяти для массивов......Page 224
10.6. Нехватка памяти......Page 225
10.7.1. Необязательный сборщик мусора......Page 226
10.7.2. Как должен выглядеть необязательный сборщик мусора?......Page 228
11.2. Разрешение перегрузки......Page 230
11.2.1. Детальное разрешение......Page 231
11.2.2. Управление неоднозначностью......Page 233
11.2.3. Нулевой указатель......Page 236
11.2.4. Ключевое слово overload......Page 238
11.3.1. Перегрузка и компоновка......Page 239
11.3.2. Реализация компоновки в C++......Page 240
11.3.3. Анализ пройденного пути......Page 241
11.4.2. Управление распределением памяти......Page 244
11.4.3. Управление наследованием......Page 245
11.4.4. Почленное копирование......Page 246
11.5.1. «Умные» указатели......Page 248
11.5.2. «Умные» ссылки......Page 249
11.5.3. Перегрузка операторов инкремента и декремента......Page 252
11.6.1. Оператор возведения в степень......Page 254
11.6.2. Операторы, определяемые пользователем......Page 257
11.6.3. Составные операторы......Page 258
11.7. Перечисления......Page 259
11.7.2.Тип Boolean......Page 261
12.1.Введение......Page 263
12.2. Базовые классы......Page 264
12.3. Виртуальные базовые классы......Page 265
12.3.1. Виртуальные базовые классы и виртуальные функции......Page 267
12.4. Модель размещения объекта в памяти......Page 270
12.4.1. Размещение в памяти объекта виртуального базового класса......Page 272
12.4.2. Виртуальные базовые классы и приведение типов......Page 273
12.5. Комбинирование методов......Page 274
12.6. Полемика о множественном наследовании......Page 276
12.7. Делегирование......Page 279
12.8. Переименование......Page 280
12.9. Инициализаторы членов и базовых классов......Page 282
13.2.1. Абстрактные классы и обработка ошибок......Page 284
13.2.2. Абстрактные типы......Page 286
13.2.4. Виртуальные функции и конструкторы......Page 288
13.3.1. Игнорирование const при приведении типов......Page 291
13.3.2. Уточнение определения const......Page 292
13.3.3. Ключевое слово mutable и приведение типов......Page 293
13.4. Статические функции-члены......Page 294
13.5. Вложенные классы......Page 295
13.6. Ключевое слово inherited......Page 297
13.7. Ослабление правил замещения......Page 299
13.7.1. Ослабление правил аргументов......Page 301
13.8. Мультиметоды......Page 303
13.8.1. Когда нет мультиметодов......Page 305
13.9. Защищенные члены......Page 307
13.10. Улучшенная генерация кода......Page 308
13.11. Указатели на функции-члены......Page 309
14.1. Крупные расширения......Page 311
14.2. Идентификация типа во время исполнения......Page 312
14.2.2. Оператор dynamic_cast......Page 313
14.2.3. Правильное и неправильное использование RTTI......Page 319
14.2.4. Зачем давать «опасные средства»......Page 321
14.2.5. Оператор typeid()......Page 322
14.2.6. Модель размещения объекта в памяти......Page 326
14.2.7. Простой ввод/вывод объектов......Page 327
14.2.8. Другие варианты......Page 329
14.3. Новая нотация для приведения типов......Page 333
14.3.1. Недостатки старых приведений типов......Page 334
14.3.2. Оператор static_cast......Page 335
14.3.3. Оператор reinterpret_cast......Page 337
14.3.4. Оператор const_cast......Page 339
14.3.5. Преимущества новых приведений типов......Page 340
15.1.Введение......Page 343
15.2. Зачем нужны шаблоны......Page 344
15.3. Шаблоны классов......Page 346
15.3.1. Аргументы шаблонов, не являющиеся типами......Page 347
15.4. Ограничения на аргументы шаблонов......Page 348
15.4.1. Ограничения за счет наследования......Page 349
15.4.2. Ограничения за счет использования......Page 350
15.5. Устранение дублирования кода......Page 351
15.6. Шаблоны функций......Page 353
15.6.1. Выведение аргументов шаблона функции......Page 354
15.6.2. Задание аргументов шаблона функции......Page 355
15.6.3. Перегрузка шаблона функции......Page 357
15.7. Синтаксис......Page 360
15.8. Методы композиции......Page 361
15.8.1. Представление стратегии реализации......Page 362
15.8.2. Представление отношений порядка......Page 363
15.9.1. Отношения наследования......Page 365
15.9.2. Преобразования......Page 367
15.9.3. Шаблоны-члены......Page 368
15.10. Инстанцирование шаблонов......Page 369
15.10.1. Явное инстанцирование......Page 371
15.10.2. Точка инстанцирования......Page 372
15.10.3. Специализация......Page 378
15.10.4. Нахождение определений шаблонов......Page 381
15.11. Последствия введения шаблонов......Page 383
15.11.2. Гибкость и эффективность......Page 384
15.11.3. Влияние на другие компоненты C++......Page 385
16.1.Введение......Page 387
16.2. Цели и предположения......Page 388
16.3. Синтаксис......Page 389
16.4. Группировка......Page 390
16.5. Управление ресурсами......Page 391
16.5.1. Ошибки в конструкторах......Page 393
16.6. Возобновление или завершение?......Page 394
16.6.1. Обходные пути для реализации возобновления......Page 397
16.7. Асинхронные события......Page 398
16.9. Статическая проверка......Page 399
16.9.1. Вопросы реализации......Page 401
16.10. Инварианты......Page 402
17.1. Введение......Page 403
17.2.1. Обходные пути......Page 404
17.3. Какое решение было бы лучшим?......Page 406
17.4. Решение: пространства имен......Page 408
17.4.1. Мнения по поводу пространств имен......Page 410
17.4.2. Внедрение пространств имен......Page 411
17.4.3. Псевдонимы пространства имен......Page 412
17.4.4. Использование пространств имен для управления версиями......Page 413
17.4.5. Технические детали......Page 415
17.5.1. Производные классы......Page 421
17.5.2. Использование базовых классов......Page 423
17.5.3. Исключение глобальных статических объявлений......Page 424
17.6. Совместимость с С......Page 425
Глава 18. Препроцессор С......Page 427
Алфавитный указатель......Page 431