Author(s): Липпман, Стенли Б.;Лажойе, Жози; Му, Барбара
Edition: 4-е изд
Publisher: Вильямс
Year: 2007
Language: Russian
Pages: 892
City: Москва [и др.]
Оглавление......Page 6
Содержание......Page 7
Введение......Page 20
ГЛАВА 1. Первые шаги......Page 24
1.1. Создание простой программы на языке С++......Page 25
1.1.1. Компиляция и запуск программы......Page 26
1.2. Первый взгляд на ввод-вывод......Page 28
1.2.2. Программа, использующая библиотеку ввода-вывода......Page 29
1.3. Несколько слов о комментариях......Page 33
1.4.1. Оператор while......Page 35
1.4.2. Оператор for......Page 37
1.4.3. Оператор if......Page 40
1.4.4. Ввод неизвестного количества данных......Page 42
1.5. Введение в классы......Page 43
1.5.1. Класс Sales_item......Page 44
1.5.2. Первый взгляд на функции-члены......Page 47
1.6. Программа на языке С++......Page 49
Резюме......Page 50
Термины......Page 51
ЧАСТЬ I. Основы......Page 54
ГЛАВА 2. Переменные и базовые типы......Page 56
2.1. Простые встроенные типы......Page 57
2.1.1. Целочисленные типы......Page 58
2.1.2. Типы с плавающей запятой......Page 61
2.2. Литеральные константы......Page 62
2.3. Переменные......Page 66
2.3.1. Что такое переменная?......Page 68
2.3.2. Имя переменной......Page 69
2.3.3. Определение объектов......Page 71
2.3.4. Правила инициализации переменных......Page 74
2.3.5. Объявления и определения......Page 76
2.3.6. Область видимости имен......Page 77
2.4. Спецификатор const......Page 79
2.5. Ссылки......Page 82
2.6. Определение имен типов......Page 84
2.7. Перечисления......Page 85
2.8. Типы классов......Page 86
2.9. Создание собственных файлов заголовка......Page 90
2.9.1. Разработка собственных заголовков......Page 92
2.9.2. Кратко о препроцессоре......Page 94
Резюме......Page 96
Термины......Page 97
ГЛАВА 3. Библиотечные типы данных......Page 102
3.1. Пространства имен и объявления using......Page 103
3.2.1. Определение и инициализация строк......Page 105
3.2.2. Чтение и запись строк......Page 106
3.2.3. Операции со строками......Page 108
3.2.4. Работа с символами строки......Page 113
3.3. Библиотечный тип vector......Page 115
3.3.1. Определение и инициализация векторов......Page 116
3.3.2. Операции с векторами......Page 118
3.4. Знакомство с итераторами......Page 121
3.4.1. Арифметические действия с итераторами......Page 125
3.5.1. Определение и инициализация наборов битов......Page 126
3.5.2. Операции с наборами битов......Page 128
Термины......Page 131
ГЛАВА 4. Массивы и указатели......Page 134
4.1.1. Определение и инициализация массивов......Page 135
4.1.2. Операции с массивами......Page 138
4.2.1. Что такое указатель?......Page 139
4.2.2. Определение и инициализация указателей......Page 140
4.2.3. Операции с указателями......Page 145
4.2.4. Использование указателей для доступа к элементам массива......Page 147
4.2.5. Указатели и спецификатор const......Page 152
4.3. Символьная строка в стиле С......Page 155
4.3.1. Динамическое создание массивов......Page 160
4.3.2. Взаимодействие со старым кодом......Page 165
4.4. Многомерные массивы......Page 166
4.4.1. Указатели и многомерные массивы......Page 168
Термины......Page 169
ГЛАВА 5. Выражения......Page 172
5.1. Арифметические операторы......Page 174
5.2. Операторы отношения и логические операторы......Page 177
5.3. Побитовые операторы......Page 180
5.3.1. Использование битовых наборов и целочисленных значений......Page 182
5.3.2. Использование операторов сдвига для организации ввода и вывода......Page 184
5.4.1. Оператор присвоения имеет порядок выполнения справа налево......Page 185
5.4.2. Оператор присвоения имеет низкий приоритет......Page 186
5.4.3. Составные операторы присвоения......Page 187
5.5. Операторы инкремента и декремента......Page 188
5.6. Оператор стрелка (->)......Page 190
5.7. Условный оператор......Page 191
5.8. Функция sizeof()......Page 192
5.9. Оператор запятая (,)......Page 193
5.10.1. Приоритет......Page 194
5.10.2. Порядок......Page 195
5.10.3. Порядок вычисления операндов......Page 198
5.11. Операторы new и delete......Page 200
5.12. Преобразование типов......Page 205
5.12.2. Арифметические преобразования......Page 206
5.12.3. Другие неявные преобразования......Page 208
5.12.5. Когда может пригодиться приведение типов......Page 210
5.12.6. Именованные операторы приведения......Page 211
5.12.7. Приведение типов в старом стиле......Page 213
Резюме......Page 214
Термины......Page 215
ГЛАВА 6. Операторы......Page 218
6.1. Простые операторы......Page 219
6.3. Составные операторы (блоки)......Page 220
6.4. Операторная область видимости......Page 221
6.5. Оператор if......Page 222
6.5.1. Оператор if с разделом else......Page 224
6.6. Оператор switch......Page 226
6.6.1. Использование оператора switch......Page 227
6.6.2. Порядок выполнения внутри оператора switch......Page 228
6.6.3. Метка default......Page 229
6.6.5. Определение переменной внутри оператора switch......Page 230
6.7. Оператор while......Page 232
6.8. Оператор цикла for......Page 234
6.8.1. Цикл for без частей заголовка......Page 235
6.8.2. Несколько определений в заголовке цикла for......Page 236
6.9. Оператор цикла do...while......Page 237
6.10. Оператор break......Page 238
6.12. Оператор goto......Page 240
6.13. Блок try и обработка исключений......Page 242
6.13.2. Блок try......Page 243
6.13.3. Стандартные исключения......Page 246
6.14. Использование препроцессора для отладки......Page 247
Резюме......Page 249
Термины......Page 250
7.1. Определение функций......Page 252
7.1.1. Тип возвращаемого значения функции......Page 254
7.1.2. Список параметров функции......Page 255
7.2.1. Нессылочные параметры......Page 257
7.2.2. Ссылочные параметры......Page 259
7.2.4. Параметры в виде массива......Page 265
7.2.5. Манипулирование массивами, переданными в функции......Page 268
7.2.6. Функция main(): обработка параметров командной строки......Page 270
7.2.7. Функции с варьирующимися параметрами......Page 271
7.3.1. Функции без возвращаемого значения......Page 272
7.3.2. Функции, возвращающие значение......Page 273
7.3.3. Рекурсия......Page 277
7.4. Объявление функций......Page 278
7.4.1. Значения параметров по умолчанию......Page 279
7.5.1. Автоматические объекты......Page 281
7.5.2. Статические локальные объекты......Page 282
7.6. Встраиваемые функции......Page 283
7.7.1. Определение тела функции-члена......Page 285
7.7.2. Определение функции-члена вне класса......Page 288
7.7.3. Создание конструктора Sales_item()......Page 289
7.7.4. Организация файлов кода классов......Page 291
7.8. Перегруженные функции......Page 292
7.8.1. Перегрузка и область видимости......Page 294
7.8.2. Подбор функций и преобразование аргументов......Page 296
7.8.3. Три этапа подбора перегруженной версии......Page 297
7.8.4. Преобразование типов аргументов......Page 300
7.9. Указатели на функции......Page 303
Резюме......Page 306
Термины......Page 307
ГЛАВА 8. Библиотека ввода-вывода......Page 310
8.1. Объектно-ориентированная библиотека......Page 311
8.2. Значения состояния потока......Page 315
8.3. Управление буфером вывода......Page 318
8.4. Ввод и вывод в файл......Page 320
8.4.1. Использование объектов файловых потоков......Page 321
8.4.2. Режимы файла......Page 324
8.4.3. Программа, открывающая и проверяющая файл......Page 326
8.5. Строковые потоки......Page 327
Термины......Page 330
ЧАСТЬ II. Контейнеры и алгоритмы......Page 332
ГЛАВА 9. Последовательные контейнеры......Page 334
9.1. Определение последовательного контейнера......Page 335
9.1.1. Инициализация элементов контейнера......Page 336
9.1.2. Ограничения типов элементов, которые может содержать контейнер......Page 338
9.2. Итераторы и диапазоны итераторов......Page 340
9.2.1. Диапазоны итераторов......Page 342
9.3. Операции с последовательными контейнерами......Page 344
9.3.1. Вспомогательные типы, определенные в классе контейнера......Page 345
9.3.3. Добавление элементов в последовательный контейнер......Page 346
9.3.4. Операторы сравнения......Page 350
9.3.5. Операции с размером контейнера......Page 352
9.3.6. Доступ к элементам......Page 353
9.3.7. Удаление элементов......Page 354
9.3.8. Присвоение и функция swap()......Page 357
9.4. Как увеличивается размер вектора......Page 359
9.4.1. Функции-члены capacity() и reserve()......Page 360
9.5. Как выбрать тип контейнера......Page 362
9.6. Еще раз о строках......Page 364
9.6.1. Дополнительные способы создания строк......Page 366
9.6.2. Дополнительные способы изменения строк......Page 368
9.6.3. Операции, специфические только для строк......Page 370
9.6.4. Операции поиска строк......Page 372
9.6.5. Сравнение строк......Page 375
9.7. Адаптеры контейнеров......Page 377
9.7.1. Адаптер stack......Page 378
9.7.2. Очередь и приоритетная очередь......Page 380
Термины......Page 381
ГЛАВА 10. Ассоциативные контейнеры......Page 384
10.1. Предварительные сведения: тип pair......Page 385
10.2. Ассоциативные контейнеры......Page 387
10.3.1. Определение карты......Page 388
10.3.2. Типы, определенные в шаблоне map......Page 390
10.3.4. Индексация карты......Page 391
10.3.5. Применение функции map::insert()......Page 393
10.3.6. Поиск и возвращение элементов карты......Page 395
10.3.8. Перебор элементов карты......Page 397
10.3.9. Карта преобразования слов......Page 398
10.4. Тип set......Page 400
10.4.1. Определение и применение наборов......Page 401
10.4.2. Создание набора, исключающего слова......Page 402
10.5.1. Добавление и удаление элементов......Page 404
10.5.2. Поиск элементов в контейнерах multimap и multiset......Page 405
10.6. Применение контейнеров: программа TextQuery......Page 408
10.6.1. Проект программы......Page 409
10.6.2. Класс TextQuery......Page 410
10.6.3. Применение класса TextQuery......Page 412
10.6.4. Создание функций-членов......Page 414
Резюме......Page 416
Термины......Page 417
ГЛАВА 11. Общие алгоритмы......Page 418
11.1. Краткий обзор......Page 419
11.2.1. Алгоритмы, только читающие элементы контейнера......Page 422
11.2.2. Алгоритмы, записывающие элементы контейнера......Page 425
11.2.3. Алгоритмы, переупорядочивающие элементы контейнера......Page 428
11.3.1. Итераторы вставки......Page 433
11.3.2. Итераторы ввода-вывода......Page 435
11.3.3. Реверсивные итераторы......Page 440
11.3.4. Константные итераторы......Page 443
11.3.5. Пять категорий итераторов......Page 444
11.4.1. Параметрическая схема алгоритмов......Page 447
11.4.2. Соглашения об именовании алгоритмов......Page 449
11.5. Алгоритмы, специфические для контейнеров......Page 450
Резюме......Page 452
Термины......Page 453
ЧАСТЬ III. Абстракция, классы и данные......Page 456
ГЛАВА 12. Классы......Page 458
12.1.1. Определение класса......Page 459
12.1.2. Абстракция данных и инкапсуляция......Page 461
12.1.3. Подробнее об определении классов......Page 464
12.1.4. Объявление и определение класса......Page 467
12.1.5. Объекты класса......Page 468
12.2. Неявный указатель this......Page 469
12.3. Область видимости класса......Page 474
12.3.1. Поиск имен в области видимости класса......Page 476
12.4. Конструкторы......Page 481
12.4.1. Список инициализирующих значений конструктора......Page 483
12.4.2. Аргументы по умолчанию и конструкторы......Page 487
12.4.3. Стандартный конструктор......Page 488
12.4.4. Неявное преобразование......Page 491
12.4.5. Явная инициализация переменных-членов класса......Page 493
12.5. Дружественные отношения......Page 494
12.6. Статические члены класса......Page 497
12.6.2. Статические переменные-члены......Page 499
Термины......Page 502
ГЛАВА 13. Управление копированием......Page 506
13.1. Конструктор копий......Page 507
13.1.1. Синтезируемый конструктор копий......Page 510
13.1.2. Определение собственного конструктора копий......Page 511
13.1.3. Предотвращение копирования......Page 512
13.2. Оператор присвоения......Page 513
13.3. Деструктор......Page 515
13.4. Пример обработки сообщения......Page 518
13.5. Работа с указателями......Page 523
13.5.1. Определение классов интеллектуальных указателей......Page 526
13.5.2. Определение классов подобных значению......Page 531
Резюме......Page 533
Термины......Page 534
ГЛАВА 14. Перегрузка операторов и преобразования......Page 536
14.1. Определение перегруженного оператора......Page 537
14.1.1. Проект перегруженного оператора......Page 541
14.2.1. Перегрузка оператора вывода <<......Page 544
14.2.2. Перегрузка оператора ввода >>......Page 546
14.3. Арифметические операторы и операторы отношения......Page 549
14.3.1. Операторы равенства......Page 550
14.4. Операторы присвоения......Page 551
14.5. Оператор индексирования......Page 552
14.6. Операторы доступа к членам класса......Page 554
14.7. Операторы инкремента и декремента......Page 557
14.8. Оператор вызова функции объекта......Page 561
14.8.1. Использование объектов функции с библиотечными алгоритмами......Page 562
14.8.2. Библиотечные объекты функций......Page 564
14.8.3. Адаптеры функций для объектов функций......Page 566
14.9.1. Зачем нужны функции преобразования......Page 567
14.9.2. Операторы преобразования......Page 568
14.9.3. Соответствие аргументов и преобразования......Page 572
14.9.4. Поиск перегруженной функции и аргументы класса......Page 576
14.9.5. Перегрузка, преобразования и операторы......Page 580
Резюме......Page 583
Термины......Page 584
ЧАСТЬ IV. Объектно-ориентированное и общее программирование......Page 586
ГЛАВА 15. Объектно-ориентированное программирование......Page 588
15.1. Краткий обзор OOP......Page 589
15.2.1. Определение базового класса......Page 591
15.2.2. Защищенные члены......Page 593
15.2.3. Производные классы......Page 595
15.2.4. Виртуальные и другие функции-члены......Page 598
15.2.5. Открытое, закрытое и защищенное наследование......Page 603
15.2.7. Наследование и статические члены......Page 607
15.3. Преобразования и наследование......Page 608
15.3.1. Преобразование производного класса в базовый......Page 609
15.3.2. Преобразование из базового класса в производный......Page 611
15.4.1. Конструкторы и функции управления копированием базового класса......Page 612
15.4.2. Конструкторы производного класса......Page 613
15.4.3. Управление копированием и наследование......Page 617
15.4.4. Виртуальные деструкторы......Page 619
15.4.5. Виртуальность конструкторов и деструкторов......Page 621
15.5. Область видимости класса при наследовании......Page 622
15.5.2. Конфликт имен и наследование......Page 623
15.5.3. Область видимости и функции-члены......Page 625
15.5.4. Виртуальные функции и область видимости......Page 626
15.6. Чистые виртуальные функции......Page 628
15.7. Контейнеры и наследование......Page 629
15.8. Управляющие классы и наследование......Page 630
15.8.1. Управляющий класс, подобный указателю......Page 631
15.8.2. Клонирование неизвестного типа......Page 634
15.8.3. Использование управляющего класса......Page 635
15.9. Продолжение приложения TextQuery......Page 640
15.9.1. Объектно-ориентированное решение......Page 641
15.9.2. Управляющий класс, подобный значению......Page 642
15.9.4. Управляющий класс Query......Page 645
15.9.5. Производные классы......Page 648
15.9.6. Виртуальные функции eval()......Page 651
Резюме......Page 653
Термины......Page 654
ГЛАВА 16. Шаблоны и общее программирование......Page 656
16.1. Определение шаблона......Page 657
16.1.1. Определение шаблона функции......Page 658
16.1.2. Определение шаблона класса......Page 660
16.1.3. Параметры шаблона......Page 661
16.1.4. Параметры типа шаблона......Page 663
16.1.5. Параметры значения шаблона......Page 665
16.1.6. Создание общих программ......Page 666
16.2. Создание экземпляра......Page 668
16.2.1. Дедукция аргумента шаблона......Page 670
16.2.2. Явные аргументы шаблона функции......Page 674
16.3. Модели компиляции шаблона......Page 677
16.4. Члены шаблона класса......Page 680
16.4.1. Функции-члены шаблона класса......Page 683
16.4.2. Аргументы шаблона для параметров значения......Page 687
16.4.3. Дружественные отношения в шаблонах класса......Page 689
16.4.4. Объявление дружественных отношений между шаблонами Queue и QueueItem......Page 691
16.4.5. Шаблоны-члены......Page 693
16.4.6. Законченный класс Queue......Page 697
16.4.7. Статические члены шаблонов класса......Page 698
16.5. Общий управляющий класс......Page 699
16.5.1. Определение управляющего класса......Page 700
16.5.2. Применение управляющего класса......Page 702
16.6. Специализация шаблона......Page 704
16.6.1. Специализация шаблона функции......Page 705
16.6.2. Специализация шаблона класса......Page 707
16.6.3. Специализация членов, но не класса......Page 710
16.6.4. Частичная специализация шаблона класса......Page 711
16.7. Перегрузка и шаблоны функций......Page 712
Резюме......Page 715
Термины......Page 716
ЧАСТЬ V. Дополнительные темы......Page 718
ГЛАВА 17. Инструменты для крупномасштабных программ......Page 720
17.1. Обработка исключений......Page 721
17.1.1. Передача исключения типа класса......Page 722
17.1.2. Прокрутка стека......Page 724
17.1.3. Обработка исключения......Page 725
17.1.4. Повторная передача исключения......Page 728
17.1.5. Обработчик для всех исключений......Page 729
17.1.7. Иерархия класса исключения......Page 730
17.1.8. Автоматическое освобождение ресурсов......Page 732
17.1.9. Класс auto_ptr......Page 734
17.1.10. Спецификация исключений......Page 740
17.1.11. Спецификация исключений указателя на функцию......Page 744
17.2.1. Определение пространств имен......Page 745
17.2.2. Вложенные пространства имен......Page 750
17.2.3. Неименованные пространства имен......Page 751
17.2.4. Использование членов пространства имен......Page 753
17.2.5. Классы, пространства имен и области видимости......Page 757
17.2.6. Перегрузка и пространства имен......Page 760
17.2.7. Пространства имен и шаблоны......Page 763
17.3.1. Множественное наследование......Page 764
17.3.2. Преобразования и несколько базовых классов......Page 767
17.3.3. Управление копированием при множественном наследовании......Page 769
17.3.4. Область видимости класса при множественном наследовании......Page 770
17.3.5. Виртуальное наследование......Page 773
17.3.6. Объявление виртуального базового класса......Page 775
17.3.7. Семантика специальной инициализации......Page 777
Резюме......Page 780
Термины......Page 781
18.1. Оптимизация распределения памяти......Page 784
18.1.1. Резервирование памяти в языке С++......Page 785
18.1.2. Класс allocator......Page 786
18.1.3. Функции operator new() и operator delete()......Page 790
18.1.4. Размещающий оператор new......Page 792
18.1.5. Явный вызов деструктора......Page 794
18.1.6. Операторы new и delete, специфические для класса......Page 795
18.1.7. Базовый класс системы резервирования памяти......Page 797
18.2.1. Оператор dynamic_cast......Page 804
18.2.2. Оператор typeid......Page 807
18.2.3. Применение RTTI......Page 809
18.2.4. Класс type_info......Page 811
18.3.1. Объявление указателя на член класса......Page 812
18.3.2. Применение указателя на член класса......Page 815
18.4. Вложенные классы......Page 818
18.4.1. Реализация вложенного класса......Page 819
18.4.2. Поиск имен в области видимости вложенного класса......Page 822
18.5. Объединение: экономный класс......Page 824
18.6. Локальные классы......Page 827
18.7.1. Битовые поля......Page 829
18.7.2. Спецификатор volatile......Page 831
18.7.3. Директивы компоновки: extern "С"......Page 833
Резюме......Page 836
Термины......Page 837
A.1. Имена и заголовки стандартной библиотеки......Page 840
A.2.1. Алгоритмы поиска объекта......Page 842
A.2.2. Другие алгоритмы, осуществляющие только чтение......Page 844
A.2.3. Алгоритмы бинарного поиска......Page 845
A.2.4. Алгоритмы записи в элементы контейнера......Page 846
A.2.5. Алгоритмы сортировки и разделения......Page 848
A.2.6. Общие функции изменения порядка......Page 850
A.2.7. Алгоритмы перестановки......Page 853
A.2.8. Алгоритмы набора для отсортированных последовательностей......Page 854
A.2.10. Числовые алгоритмы......Page 855
A.3.1. Флаги формата......Page 857
A.3.2. Большинство манипуляторов изменяют флаг формата......Page 858
A.3.3. Управление форматом вывода......Page 859
A.3.5. Бесформатные операции ввода-вывода......Page 866
A.3.6. Однобайтовые операторы......Page 867
A.3.7. Многобайтовые операторы......Page 869
A.3.8. Произвольный доступ к потоку......Page 870
A.3.9. Чтение и запись в тот же файл......Page 873
Предметный указатель......Page 876