Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программирование на C / C++ / Ален И. Голуб. Правила программирования на Си и Си++ [pdf]

.pdf
Скачиваний:
237
Добавлен:
02.05.2014
Размер:
5.67 Mб
Скачать

С++ для начинающих

Г

глобальное пространство имен проблема засорения, 66, 406

глобальные объекты и функции, 381–87

сравнение с параметрами и возвращаемыми значениями функций, 349–50

глобальные функции, 381 горизонтальная табуляция (\\t)

как escape-последовательность, 77

Д

данные члены, 595–96 данные-члены

битовые поля, 643–45

изменчивые (mutable), 614–16

статические, 621–28 в шаблонах классов, 821–24

указатель this, 616–21

члены базового и производного классов, 870– 79

двойная кавычка (\\ ")

как escape-последовательность, 77 двойная обратная косая черта (\\)

как escape-последовательность, 77 двунаправленный итератор, 583 декремента оператор (--)

встроенный, 153–54 перегруженный, 740–44 постфиксная форма, 153, 743 префиксная форма, 153, 742

деление комплексных чисел, 155 целочисленное, 143

деления по модулю оператор (%), 142 деструктор(ы), 682–89

для элементов массива, 690

динамическое выделение памяти для массива, 162, 400–402

исчерпание памяти, исключение bad_alloc, 393

как требование к динамически растущему вектору, 253

объектов, 392–406

управление с помощью класса auto_ptr, 395

динамическое освобождение памяти для массивов, 400–402 объектов, 392–406

константных, 402–3 одиночных объектов, 392–95

оператор delete, 134, 392, 394, 744–53

управление с помощью класса auto_ptr, 395 утечка памяти, 395

директивы, 21–24 директивы связывания, 353–55

в связи с перегрузкой, 438 использование с указателями на функции, 373

для элементов массива динамическое выделение памяти, 691–94

доступ к контейнеру

использование итератора для, 261

1172

последовательный доступ как критерий выбора типа, 252

кмассиву, 31 индекс, 45

индексирование, 113

кпространству имен

механизмы, компромиссные решения, 68

к членам, 598–99, 607–8

оператор доступа к членам ->, 740 произвольный, итератор с произвольным

доступом, 583

уровни, protected, 49 друзья, 730–33

и специальные права доступа, 137, 599–600 перегруженные операторы, 730–33 См. также доступ, класс(ы), наследование,

815–21

Е

емкость контейнерных типов в сравнении с размером, 253

начальная, связь с размером, 258

З

забой (, 77

заголовочные файлы как средство повторного использования

объявлений функций, 323

по имени algorithm, 72, 584 bitset, 167 complex, 125 fstream, 1042 functional, 568 iomanip, 136 iterator, 578 limits, 145 locale, 283

map, 293 memory, 395 numeric, 584, 586 queue, 315

set, 304 sstream, 1044 stack, 312 string, 68

vector, 70, 121, 256

предкомпилированные, 385

содержимое включение определения шаблона функции,

преимущества и недостатки, 495 встроенные функции, 353 директивы связывания, 354 объявления, 82, 385–87

объявления явных специализаций шаблонов, 503

спецификация аргументов по умолчанию, 341

запись активации, 327 автоматическое включение объектов в, 388

запятая (,)

С++ для начинающих

неправильное использование для индексации массива, 117

оператор, 163 звонок ()

как escape-последовательность, 77 знак вопроса ()

как escape-последовательность, 77

И

И, оператор, 142 идентификатор, 83

использования в качестве спецификатора типа класса, 129

как часть определения массива, 113 соглашения по именованию, 83

иерархии определение, 862–69

идентификация членов, 870–80 исключений, в стандартной библиотеке

C++, 1026–29

поддержка мезанизма классов, 128

изменчивый (mutable) член, 614–16

именование соглашения об именовании идентификаторов,

83

имя, 83

typedef, как синоним, 126–27

именование членов класса, 607–8 квалифицированные имена, 410–12

статических членов класса, 622–23 членов вложенных пространств имен, 412–

14

шаблонов функций как членов пространства имен, 524

область видимости объявления, 376

параметра шаблона функции, 478

перегруженные операторы, 727–28 переменной, 83 псевдонимы пространства имен, как

альтернативные имена, 420–21 разрешение, 377

влокальной области видимости, 379

вобласти видимости класса, 649–52

вопределении шаблона функции, 514–20

инициализация векторов, 121

сравнение с инициализацией встроенных массивов, 122

комплексного числа, 154

массива динамически выделенного, 400

динамически выделенных объектов классов, 749

многомерного, 116 указателей на функции, 369

недопустимость инициализации другим массивом, 115

объектов автоматических, 388

автоматических, по сравнению с локальными статическими, 391

1173

глобальных, инициализация по умолчанию, 382

динамически выделенных, 393 константных, 101 статических локальных, 390, 391

поведение auto_ptr, 397

сравнение с присваиванием, 148 ссылок, 104 указателя на функцию, 367

влияние на спецификацию исключений, 549

вопросы, связанные с перегруженными функциями, 439

инкремента оператор (++) встроенный, 154 перегруженный, 740–44 постфиксная форма, 153, 743 префиксная форма, 153, 742

инструкции, 188–98 break

для выхода из инструкции switch, 203 break, инструкция, 218–19

continue, 219 do-while, 216–17

сравнение с инструкциями for и while, 209 for, 209–13

goto, 219–21 if, 20, 192–98

if-else, условный оператор как альтернатива, 158

switch, 201–3

использование ключевого слова default, 202, 205

while, 213–16

сравнение с инструкциями for и do-while, 209

блок, 188 объявления, 189–92 простые, 188–89 составные, 188–89

инструкция while, 21

использование преобразования квалификаторов, 449

использование шаблонов, 62 итератор с произвольным доступом, 583

итератор(ы), 123, 261

begin(), доступ к элементам контейнера, 261 end(), доступ к элементам контейнера, 261 iterator, заголовочный файл, 578 абстракция, использование а обобщенных

алгоритмах для обхода, 552 адаптор, 557

вставка элементов в последовательные контейнеры, 266

доступ к подмножеству контейнера с помощью, 262

использование в обобщенных алгоритмах, 575–83

категории, 582–83 двунаправленный итератор, 583 итератор записи, 582

итератор с произвольным доступом, 583 итератор чтения, 582

С++ для начинающих

однонаправленный итератор, 583

обозначение интервала с включенной левой границей, 583

обратные итераторы, 578 потоковык итераторы ввода/вывода, 578–82

istream_iterator, 579–80 ostream_iterator, 580–82

запись целых чисел из вектора в стандартный вывод, 578

чтение целых чисел из стандартного ввода в вектор, 579

требования к поведению, выдвигаемые обобщенными алгоритмами, 584

удаление элементов из последовательного контейнера, 267

К

китайский язык поддержка двухбайтовых символьных

литералов, 77 класс(ы)

возвращаемые значения, 347–49 вопросы эффективности, 712–18

друзья, 599–600, 731

заголовок, 594 объединение, 638–43

объявление, сравнение с определением класса, 600–601

определение, 594–601 сравнение с объявлением класса, 600–601

параметры вопросы эффективности, 330, 712–18

для возврата сразу нескольких значений, 350

для передачи сразу нескольких параметров, 350

тело, 594

командная строка класс, 363–65 опции, 356–65

argc, argv - аргументы main(), 356

использование встроенного массива для обработки, 356

пример программы, 361–63 комментарии, 24–26

блочные, 25 комплексные числа, 18, 125–26

выражения с участием, 155 заголовочный файл complex, 125 как абстракция класса, 30 операции, 154–58 представление, 156 типы данных, 30

композиция объектов, 963–65

сравнение с наследованием, 960–62

конкретизация шаблона функции, 482

явное объявление специализации шаблона функции, 497–98

Конкретизация шаблона функции

разрешение перегрузки, 506–13

1174

конктеризация точка конкретизации, 518

константы константные выражения

sizeof() как пример, 162

размер массива должен быть, 113 литерал, 76–78 подстановка, 386

преобразование объектов в, 101 ссылки, рассматриваемые как, 104

конструктор(ы)

вызовы виртуальных функций в, 923–25 для базовых классов, 899

почленная инициализация, 925–30 при виртуальном наследовании, 974–82 при единичном наследовании, 896

при множественном наследовании, 950–51

для элементов массива список инициализации массива, 689–91

и функциональные try-блоки, 1024–26 как коверторы, 761–64 конструкторы по умолчанию, 678–79

для элементов вектора, 694–96 копирующие конструкторы, 237, 680–82

почленная инициализация, 703–9, 925–30 ограничение возможности созданий объектов,

680

список инициализации членов, 696–703

контейнерные типы определение, 256–61

контейнерные типы, 248–301 вопросы выделения памяти при копировании,

577

емкость, 253 связь с размером, 253–58

и итераторы, 261–65 инициализация, с помощью пары итераторов,

263

очереди с приоритетами, 315

параметры, 338–40, 350

преимущества, автоматическое управление памятью, 402

размер, 258 связь с емкостью, 253–56

требования к типам, с которыми конкретизируется контейнер, 259

копирование вопросы выделения памяти, 577

использование ссылок для избежания, 330 как операция инициализации, 258 массивов, 115

сравнение со стоимостью произвольного доступа, 252

строк, 96

копирующий конструктор, 43, 131

для динамического увеличения размера вектора, 255

оператор присваивания, реализация, 237

Л

лексикографическое упорядочение, 289

С++ для начинающих

1175

в обобщенных алгоритмах перестановок, 586

недопустимость присваивания другому

в обобщенныых алгоритмах сравнения, 586

массиву, 115

при сортировке строк, 366–75

недопустимость ссылок на массив, 115

литеральные константы, 76–78

обход

C-строки

с помощью манипуляции указателем, 118

сравнение с символьными литералами, 114

с помощью пары итераторов, 263–64

f суффикс, 77

объектов класса, 689–96

U суффикс, 76

определение, 30, 113

с плавающей точкой, 77

перегруженный оператор

логические встроенные операторы, 145–48

delete[], 749–51

оператор ИЛИ (||), 146

new[], 749–51

оператор НЕ (!), 147

поддержка обобщенными алгоритмами, 553

логические объекты-функции

размер, не является частью типа параметра,

logical_and, 572

335

logical_not, 572

связь с типом указателей, 118–20

logical_or, 572

указателей на функции, 369–70

локализация

меньше, оператор

влияние глобального объекта на, 349

поддержка в арифметических типах данных,

константной переменной или объекта, 100

30

локальность объявления, 190, 385

требование о поддержке типом элементов

на уровне файла, использование безымянного

контейнера, 259

пространства имен, 419

минус(-)

локальная область видимости, 376, 378–81

для выделения опций в командной строке,

try-блок, 535

357

доступ к членам в глобальной области

многоточие (...), 343–44

видимости, скрытым за локальными

использование в типах функций, 367

объектами, 411

множество (set), контейнерный тип

имена в пространстве имен, скрытые за

set, заголовочный файл, 304

локальными объектами, 414

size(), 307

переменная, неинициализированная, 388

обход, 306–7

разрешение имени, 379

ограничение на изменение порядка, 587

локальные объекты, 388–92

определени, 304–6

проблема возврата ссылки на, 348

поиск элементов, 306

статические, 388, 390–92

сравнение с отображением, 292

 

модели компиляции

М

с разделением, 834–37

шаблонов класса

 

массив(ы), 113–20

с включением, 833

в сравнении с векторами, 122

с разделением, 834–36

динамическое выделение и освобождение,

шаблонов классов, 831–38

400–402

шаблонов функций, 494–98

массивов объектов классов, 691–94, 744–

с включением, 494–95

53

с разделением, 495–97

индексирование, 31, 113–16

Н

многомерных массивов, 116–17

отсутствие контроля выхода за границы

наилучшая из устоявших функций, 442

диапазона, 116

инициализация, 31, 114–15

неинициализированный

динамически выделенных массивов, 400

автоматический объект, 388

динамически выделенных массивов

глобальный объект, 382

объектов класса, 690–94

локальный статический объект, 391

многомерных массивов, 116–17

неоднозначность

недопустимость инициализации другим

перегруженных

массивом, 115

функций, диагносцирование во время

использование оператора sizeof(), 159

разрешения перегрузки, 454

как параметры функций, 335–39

указателя, стандартные преобразования, 456

для передачи нескольких параметров, 350

шаблона функции

многомерные, 338

аргумента, разрешение с помощью явной

преобразование массива в указатель, 448

спецификации, 492

многомерные, 116–17

конкретизации, ошибка, 484

недопустимость использования auto_ptr, 395

конкретизация, опасность перегрузки, 505

недопустимость использования в качестве

неявные преобразования типов, 176

возвращаемого значения функции, 324

новая строка ()

 

как escape-последовательность, 77

С++ для начинающих

1176

О

параллельный обход двух векторов, 296

область видимости, 376–81

объединение

разновидность класса, 638–43

видимость класса, 645–52

объект(ы)

и определение класса, 594

автоматические, 388–89

разрешение имен в, 649–52

объявление с ключевым словом register,

глобальная область видимости, 376

389–90

и время жизни (глава), 376–428

глобальные

и перегрузка, 434–38

и функции, 381–87

локальная область видимости, 378–81

сравнение с параметрами и

обращение к скрытым членам глобальной

возвращаемыми значениями функций,

области видимости, 411

349–50

разрешение имен в, 379

использование памяти, 82

объявлений исключений в catch-

локальные, 388–92

обработчиках, 540

определение, 87

параметра шаблона

переменные как, 81

функции, 478–81

члены пространства имен, 407–8

пространства имен, 376

объектное программирование, 593

управляющих переменных в инструкции for,

объектно-ориентированное программирование

379

проектирование

область видимости глобального пространства

(пример), 46–55

имен, 376, 406

объекты-функции, 566–75

доступ к скрытым членам с помощью

functional, заголовочный файл, 568

оператора разрешения области видимости,

арифметические, 570

411

использование в обобщенных алгоритмах,

обобщенные алгоритмы

552

(глава), 552–92

источники, 568

algorithm, заголовочный файл, 584

логические, 572

numeric, заголовочный файл, 584

предопределенные, 568–70

алфавитный указатель (приложение), 1103–

преимущества по сравнению с указателями

94

на функции, 567

генерирования, 586

реализация, 573–75

использование итераторов, 575–83

сравнительные, 571

категории и описания, 583–87

Объекты-функции

когда не надо использовать, 587–92

адапторы функций для, 573

модификации, 586

объявление

независимость от типа, 552, 553

инструкция, 14

нотация для диапазона элементов, 583

объявления

обзор, 552–56

базового класса, виртуальное, 976–78

объекты-функции как аргументы, 567

в части инициализации цикла for, 210

использование предопределенных

видимость имени, вводимого объявлением,

объектов-функций, 569

376

перестановки, 586

друзей, в шаблоне класса, 815–21

подстановки, 585

и определение, 382–83

пример использования, 556–66

инструкция, 189–92

работа с хипом, 587

исключения, 538

сравнения, 586

класса bitset, 167

удаления, 585

объектов, 169

численные, 586

класса, сравнение с определением, 600–601

обработка исключений

локальность, 190

bad_alloc, исключение нехватки памяти, 393

перегруженное

обратная косая черта (

оператора, 131

как escape-символ, 280

функции, 429

как префикс escape-последовательности, 77

пространства имен, 407

обратные итераторы, 578

сопоставление объявлений в разных файлах,

обход

383

заполнение множества с помощью, 305

указателя на функцию, 366

использование с контейнерами multimap и

включение спецификации исключений в,

multiset, 309

548

множества, 306–7

функции, 322

невозможность обхода перечислений, 112

задание аргументов по умолчанию, 341

обход отображения, 303

как часть шаблона функции, 477

отображения текста на вектор позиций, 298–

размещение в заголовочном файле, 385

301

функции-члена, перегруженное, 776–78

С++ для начинающих

1177

шаблона функции определение используемых имен, 516 связь с определением, 515

требования к размещению явных объявлений конкретизации, 497

явная специализация, 499

явной конкретизации шаблона класса, 837–38 шаблона функции, 497–98

одиночная кавычка (_)

как escape-последовательность, 77 однонаправленный итератор, 583 оператор "меньше"

характеристики и синтаксис, 146 оператор ввода, 27 оператор вывода, 1045

перегрузка, 1069. См. cout. См. cout

оператор вызова функции, 736–38

операторы

встроенные

(глава), 141–87, 141–87 sizeof, 159–62

арифметические, 142–45 бинарные, 141

декремента (--), 153–54

доступа к членам класса (. и ->), 607–8 запятая, 163

инкремента (++), 153–54

логические, 145–48 побитовые, 164–66 приоритеты, 171–74 равенства, 145–48

разрешения области видимости ( ), 410–12

составного присваивания, 152 сравнения, 145–48

перегруженные delete, 744–49

delete(), размещения, 751–53 delete[], 749–51

new, 744–49

new(), размещения, 751–53 new[], 749–51

взятия индекса ([]), 736 вопросы проектирования, 728–30 вызова функции (()), 736–38

вызова функции для объектов-функций, 567

декремента (--), 740–44

доступа к членам (->), 738–40

имена, 727–28 инкремента (++), 740–44

объявленные как друзья, 730–33 присваивания (=), 733–35 с параметрами-ссылками, преимущества,

335

члены и не-члены класса, 723–27 определения, 15

typedef, 126

базового класса, 871–75 иерархии классов, 862–69

исключений, как иерархий классов, 1013–14

класса, 594–601

сравнение с определением класса, 600–601

класса-диспетчера запросов (пример), 934–39 массива, 113 многомерных массивов, 116 множеств, 304–6

недопустимость размещения в заголовочном файле, 385

объекта, 382

объектов класса bitset, 169 объектов класса complex, 125

последовательных контейнеров, 256–61 производного класса, 876–78 пространств имен, 406–20

членов, 415–17

сравнение с объявлениями, 381–83

функции и локальная область видимости, 378

как часть шаблона функции, 477 шаблона класса, 791–800

разрешение имен в, 844–46

опции в командной строке, 356–65

отображения, 292–309

map, заголовочный файл, 293 заполнение, 293 невозможность переупорядочения, 587

недопустимость использования итераторов с произвольным доступом, 583

сравнение с множествами, 292

текста заполнение, 292–98

определение, 292–98

отрицатели как адапторы функций, 573

очереди, 315–16

queue, заголовочный файл, 315 size(), 315

top(), функция, 316

очереди с приоритетами, 315, 316 очередь с приоритетами, 315

size(), 315

top(), функция, 316

ошибки

assert(), макрос, 226

бесконечная рекурсия, 351

винструкции if, 193

вциклах, 197

зацикливание, 93 висячие указатели, 389 как избежать, 394

динамического выделения памяти, 395 итератор, использование, 226 компиляции, конфликты в области видимости

using-объявления, 437

массив индекс за концом, 94

области видимости, подводные камни using- директивы, 426

оператор присваивания вместо оператора равенства, 100

порядка вычисления подвыражений, 142 проблема висячего else, 195

проблемы константных ссылок и указателей, 106

проблемы побитовых операторов, 166

С++ для начинающих

проблемы, связанные с глобальными объектами, 349

пропуска

завершающего нуля в C-строке, 402

скобок при освобождении динамически выделенного массива, 402

редактора связей повторные определения, 386

смещения на единицу при доступе к массиву, 31

фазы связывания при наличии объявления в нескольких файлах, 383

Ошибки конкретизации шаблона функции, 484

П

память утечка, 35

параметр(ы)

объявление, сравнение с объявлением исключений, 540

размер, важность для передачи по значению, 327

списки параметров переменной длины, многоточие, 343

различия перегруженных функций, 431 ссылочные, 329–33

влияние на преобразования при разрешении перегрузки функции, 457

преимущества эффективности, 330, 540 ранжирование, 471 сравнение с параметрами-указателями,

333–35

шаблона использование указателей на константы,

101

не являюшиеся типами, 476 являюшиеся типами, проверка, 325–26

параметры функций аргументы по умолчаниюю, 340–43

использования многоточия, 343–44 массивы, 335–39 при разрешении перегруженных функций,

430

проверка типов, 325–26 списки параметров, 325

сравнение параметров указательного и ссылочного типов, 333–35

сравнение с глобальными объектами, 349–50

ссылки, 107, 329–33

использование для возврата нескольких значений, 197

на константы, 331 преимущества в эффективности, 330

сравнение с параметрами-указателями, 333–35

тип возвращаемого значения тип pair, 197

указатели, 329 указатели на функции, 370–73

переменные глобальные параметры и возвращаемые

значения, 349–50

1178

константные, 100 объявление как член пространства имен, 408

переносимость знак остатка, 143

перестановки, обобщенные алгоритмы, 589 перечисления, 110–13

основания для включения в язык, 110

расширение типа при разрешении перегрузки функции, 452

точное соответствие при разрешении перегрузки функции, 445

по умолчанию аргументы, 340–43

и виртуальные функции, 910–13 влияние на выбор устоявших функций, 472 и устоявшие функции, 472–73 конструктор, см. конструктор, 678–79

побитовый(е) оператор И (&), 164

оператор И с присваиванием (&=), 152, 164 оператор ИЛИ (!), 165 оператор ИСКЛЮЧАЮЩЕЕ ИЛИ (^), 165 оператор НЕ (~), 164 оператор сдвига (<<,>>), 165 операторы, 164–66

поддержка в классе bitset, 170

повторное возбуждение исключения, 542–43

позиция разрешение аргумента по позиции в списке,

341

поиск rfind(), 278

подстрок, 280

элементов

множества, 306

отображения текста, 298–99 ПОО (правило одного определения), 382, 416–

18

последовательные контейнеры, 248–319 вставка элементов, 265 критерии выбора, 252 обобщенные алгоритмы, 269–70 определение, 256 перестановка элементов, 269 присваивание, 268 удаление элементов, 267

предостережения использование знакового бита в битовых

векторах, 166

неопределенность порядка вычисления бинарных операторов сравнения, 147

опасности приведения типов, 178

подводные камни using-директивы, 426

возврата l-значение, 348 возврата ссылки на объект, 348 глобальные объекты, 349 приведения типов, 181 шаблона класса auto_ptr, 399

представление влияние на расширение типа перечисления,

452

С++ для начинающих

1179

информация о реализации в заголовочном файле limits, 145

строк, 92 целых чисел, 143

преобразование bool в int, 109

l-значения в r-значение, 446–47 арифметическое, 177–78 бинарного объекта-функции в унарный,

использование адаптора-связывателя, 573

выбор преобразования между типами классов, 764–76

выведение аргументов шаблона функции, 486

как точное соответствие при разрешении перегрузки функции, 459

квалификаторов влияние на последовательность

преобразований, 470

при выведении аргументов шаблона функции, 487

ранжирование при разрешении перегрузки функции, 470

конверторы, 445

конструкторы конструкторы как конверторы, 761–64

множественные, разрешение неоднозначности приведения, 468

недопустимость преобразований между типами указателей на функции, 439

неявные преобразования типов, 176

определенное пользователем, 445

последовательности определенных пользователем

преобразований, 764–67 определенных пользователем,

ранжирование при разрешении перегрузки функций, 771–76 определенных пользователем, с учетом

наследования, 1034–36 стандартных преобразований, 468–72

ранжирование инициализации ссылок при разрешении перегрузки функции, 457

расширения типа, 175 аргументов, 451–53

типа перечисления в арифметические типы, 112

спотерей точности, предупреждение компилятора, 326

стандартное, 453–57 типа аргумента, 444–60

трансформации l-значений, 450 трансформация I-значений

преобразования при выведении аргументов шаблона функции, 486

трансформация I-значения

ранжирование при разрешении перегрузки функции, 468

указателей

в тип void* и обратно, 179 преобразования квалификаторов, 449 стандартные преобразования указателей,

456

трансформации l-значений, массива в указатель, 448

трансформации l-значений, функции в указатель, 448

явные преобразования типов, 144, 175, 178

препроцессор

комментарий парный(/**/), 25

константы

__cplusplus__, 23

макросы шаблоны функций как более безопасная

альтернатива, 474 предкомпилированные заголовочные файлы,

385

приведение(я), 144

const_cast, оператор, опасность применения,, 180

dynamic_cast (), оператор, 1001–7 dynamic_cast()

идентификация класса объекта во время выполнения, 182

reinterpret_cast

опасности, 181 reinterpret_cast, оператор, 181 static_cast

сравнение с неявными преобразованиями, 180

static_cast, оператор, 181

выбор конкретизируемого шаблона функции, 485

для принудительного установления точного соответствия, 450

опасности, 181 сравнение нового синтаксиса со старым, 182 старый синтаксис, 182–83

применение для подавления оптимизации, 127

примеры

класс IntArray, 45

IntSortedArray, производный класс, 54 класс iStack, 183–87

поддержка динамического выделения памяти, 316–17

преобразование в шаблон stack, 318–19

класс String, 128–39

класс связанного списка, 221–47 обработка аргументов в командной строке,

356–57

система текстового поиска

(глава 6), 248–319 функция sort, 365

шаблон класса Array, 55–62, 849–57 SortedArray, производный класс, 993–98

примитивные типы

(глава), 98–139

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

массивами, 122

и поведение auto_ptr, 397

комплексных чисел, 155 массиву, недопустимость присваивания

другого массива, 115

оператор

и требования к l-значению, 81

перегруженный, 709–12, 733–35

составной, 152

С++ для начинающих

последовательному контейнеру, 268–69 почленное для объектов класса, 709–12 ссылке, 107 указателю на функцию, 367

вопросы, связанные с перегруженностью функции, 439

проверка выхода за границы диапазона, 289

не выолняется для массивов, 116

типа назначение и опасности приведения типов,

182

неявные преобразования, 326 объявления, разнесенного по нескольким

файлам, 384

отмена с помощью многоточия в списке параметров, 343

параметра, 325–27 сохранения в шаблоне функции, 476 указателя, 88

программа, 14–21

производительность auto_ptr, 397

классы, локальность ссылок, 191

компиляции зависимость от размера заголовочного

файла, 385 при конкретизации шаблонов функций,

497

контейнеров емкость, 255

компромиссы при выборе контейнера, 252 сравнение списка и вектора, 254

определения шаблона функции в заголовочном файле, 495

сравнение обработки исключений и вызовов функций, 550

ссылок

объявление исключений в catch- обработчиках, 540

параметры, 330

параметры и типы возвращаемых значений, 389

указателей на функции проигрыш по сравнению с параметрами-

ссылками, 540

проигрыш по сравнению со встроенными функциями, 559

сравнение с объектами-функциями, 567

функций вопросы, связанные с возвращаемыми

значениями, 324

накладные расходы на вызов рекурсивных функций, 351

недостатки, 352 передачи аргументов по значению, 328

преимущества встроенных функций, 133

производные классы деструкторы, 896–99 конструирование, 889–96

почленная инициализация, 925–27 конструкторы, 892–93

определение при виртуальном наследовании, 976–78

1180

при множественном наследовании, 950–55 присваивание почленное, 927–28

пространства имен, 406–20 безымянные, 418–20

инкапсуляция сущностей внутри файлов, 419

отличие от других пространств имен, 419 вложенные, 412–14

и using-объявления, 435

объявления перегруженных функций внутри, 434–38

глобальное, 376

доступ к скрытым членам с помощью оператора разрешения области видимости, 411

проблема загрязнения пространства имен, 406

область видимости, 376 std, 426–28

определения, 408–10 определенные пользователем, 407 псевдонимы, 420–21

члены определения, 416

требование правила одного определения, 416–18

шаблоны функций, 521–24

процедурное программирование

(часть 3), 592–782

псевдоним(ы)

имен типов, typedef, 127

пространства имен, 66, 420–21

Р

равенство оператор(ы), 145–48

потенциальная возможность выхода за границы, 116

разрешение перегрузки функции, 443 (глава), 429–73

выбор преобразования, 767 детальное описание процедуры, 460–73 наилучшая из устоявших функция, 453

для вызовов с аргументами типа класса, 771–76

и перегрузка, 468–72

ранжирование последовательностей определенных

пользователем преобразований, 1034– 36

последовательностей стандартных преобразований, 468–72

устоявшие функции, 465–68 для вызовов операторных функций, 787–

88

для вызовов функций-членов, 779–82

иаргументы по умолчанию, 472–73

инаследование, 1034–36

функции-кандидаты, 461–65 для вызовов в области видимости класса,

770–71

для вызовов операторных функций, 783– 87

С++ для начинающих

для вызовов с аргументами типа класса, 767–70

для вызовов функций-членов, 778 и наследование, 1031–34

явные приведения как указания компилятору, 451

разрешения области видимости оператор (

)

доступ к членам глобальной области видимости, 411

), 410–12

)

доступ к членам вложенного пространства имен, 412–14

Разрешения области видимости оператор (

)

доступ к шаблону функции как члену пространства имен, 524

разыменования оператор (*)

использование с возвращенным типом указателя, 367

как унарный оператор, 141 не требуется для вызова функции, 368

опасности, связанные с указателями, 333 приоритет, 118

ранжирование определений шаблона функции, 505

последовательностей стандартных преобразований, 468–72

рассказ об Алисе Эмме, 250

и реализация класса string, 137 рекурсивные функции, 352

С

С, язык

символьные строки

использование итератора istream_iterator, 579

функции указатели на функции, 373

связыватель как класс адаптора функции, 573

сигнатура, 325 символ(ы)

литералы синтаксис записи, 77

массив символов, инициализация, 114, 115 нулевой, для завершения строкового

литерала, 78

символы & (амперсанд)

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

104 && (двойной амперсанд)

оператор логического И, 146

символы (двойное двоеточие)

оператор разрешения области видимости класса, 42

(двойное двоеточие)

оператор разрешения области видимости, 410–12

1181

-- (двойной минус)

оператор декремента, 153, 740–44 - (минус)

использование для обозначения опций в командной строке, 357

! (восклицательный знак) оператор "логическое НЕ"

вычисление, 147 характеристики и синтаксис, 145

%(процент)

оператор деления по модулю, 142

оператор вычисления остатка, характеристики и синтаксис, 143

%= (процент равно)

оператор вычисления остатка с присваиванием, 152

& (амперсанд)

оператор взятия адреса использование с именем функции, 164 как унарный оператор, 141

оператор побитового И, 164 && (двойной амперсанд)

оператор логического И, 142 &= (амперсанд равно)

оператор побитового И с присваиванием, 164

как оператор составного присваивания, 152

() (круглые скобки)

использование оператора вызова для передачи объекта-функции, 567

оператор вызова, перегрузка в объектах- функциях, 559

(обратная косая черта a) escape-последовательность "звонок", 77

(обратная косая черта n) escape-последовательность "новая строка",

77

(обратная косая черта v) escape-последовательность "вертикальная

табуляция", 77 (обратная косая черта знак вопроса)

escape-последовательность "знак вопроса", 77

(обратная косая черта)

как escape-символ, 280 * (звездочка)

оператор разыменования доступ к объектам с помощью, 89

использование для задания типа возвращаемого значения, 366

как унарный оператор, 141 не требуется для вызова функции, 368

определение указателей с помощью, 87 приоритет, 118

оператор умножения характеристики и синтаксис, 142

*= (звездочка равно)

оператор умножения с присваиванием, 152 , (запятая)

неправильное применение для индексации массива, 117

оператор, 163

. (точка)