SlideShare uma empresa Scribd logo
1 de 476
Baixar para ler offline
А. Пол
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ НА C++
Книга Айры Пола, автора многих популярных изданий по С и C++, не является
ни учебником по C++, ни курсом по объектно-ориентированному
программированию (ООП) «вообще», хотя может быть полезна и в этих двух
качествах. Задача книги (точно отраженная в названии) совершенно конкретна:
научить читателя писать на C++ объектно-ориентированные программы. Для
многих абстрактных идей и понятий ООП в C++ существуют конкретные
воплощающие их конструкции. В каждой главе автор вводит и объясняет
очередную «порцию» таких конструкций, демонстрирует технику их
эффективного использования. В некоторых случаях возникающие перед
программистом на C++ проблемы не могут быть непосредственно решены
средствами языка. Здесь на помощь приходят разнообразные приемы, не владея
которыми трудно программировать на C++ реальные задачи. Такие приемы
поясняются автором на многочисленных примерах, причем наиболее
показательные программы подвергаются тщательному разбору.
Много внимания на страницах книги уделено самым последним дополнениям
C++: стандартной библиотеке шаблонов (STL), пространствам имен (namespaces),
механизму идентификации типов во время выполнения (RTTI), явным
приведениям типов (cast-операторам) и другим.
Книга в первую очередь рассчитана на программистов, желающих получить
ясное представление о парадигме объектно-ориентированного программирования
в C++. Издание также будет полезно преподавателям, студентам и всем, кто хочет
освоить объектно-ориентированное программирование на C++.
Содержание
Предисловие 13
Глава 1
Зачем нужно объектно-ориентированное программирование на C++? 17
1.1. Объектно-ориентированное программирование 18
1.2. Пример программы на C++ 19
1.3. Инкапсуляция и расширяемость типов 21
1.4. Конструкторы и деструкторы 23
1.5. Перегрузка 25
1.6. Шаблоны и обобщенное программирование 27
1.7. Стандартная библиотека шаблонов (STL) 29
1.8. Наследование 30
1.9. Полиморфизм 32
1.10. Исключения в C++ 34
1.11. Преимущества объектно-ориентированного программирования 35
Глава 2
Собственные типы данных и инструкции 37
2.1. Элементы программы 37
2.1.1. Комментарии 38
2.1.2. Ключевые слова 38
2.1.3. Идентификаторы 39
2.1.4. Литералы 39
2.1.5. Операторы и знаки пунктуации 41
2.2. Ввод-вывод 41
2.3. Структура программы 42
2.4. Простые типы 44
2.4.1. Инициализация 45
2.5. Традиционные преобразования 46
2.6. Перечислимые типы 49
2.7. Выражения 50
2.8. Инструкции 53
2.8.1. Присваивание и выражения 53
2.8.2. Составная инструкция 55
2.8.3. Инструкции if и if-else 55
2.8.4. Инструкция while 56
2.8.5. Инструкция for 56
2.8.6. Инструкция do 57
2.8.7. Инструкции break и continue 58
2.8.8. Инструкция switch 59
2.8.9. Инструкция goto 60
2.9. Практические замечания 61
Резюме 61
Упражнения 63
Глава 3
Функции и указатели 69
3.1. Функции 69
3.1.1. Вызов функции 69
3.2. Определение функции 70
3.3. Инструкция return 71
3.4. Прототипы функций 72
3.5. Аргументы по умолчанию 74
3.6. Перегрузка функций 75
3.7. Встраивание 76
3.8. Область видимости и класс памяти 77
3.8.1. Класс памяти auto 78
3.8.2. Класс памяти register 79
3.8.3. Класс памяти extern 79
3.8.4. Класс памяти static 81
3.8.5. Таинства компоновки 82
3.9. Пространства имен 82
3.10. Типы указателей 83
3.10.1. Определение адреса и разыменование 84
3.10.2. Вызов по ссылке на основе указателей 84
3.11. Применение void 86
3.12. Массивы и указатели 86
3.12.1. Индексирование 87
3.12.2. Инициализация 88
3.13. Связь между массивами и указателями 88
3.14. Передача массивов функциям 89
3.15. Объявления ссылок и вызов по ссылке 90
3.16. Проверка утверждений и корректность программы 92
3.17. Строки: соглашение о char* 94
3.18. Многомерные массивы 95
3.19. Операторы свободной памяти new и delete 95
3.20. Практические замечания 98
3.20.1. void* и reinterpret_cast 98
3.20.2. Замена объявлений static extern 98
Резюме 99
Упражнения 100
Глава 4
Реализация АТД в базовом языке 107
4.1. Агрегатный тип struct 107
4.2. Оператор указателя структуры 109
4.3. Пример: стек 109
4.4. Объединения 113
4.5. Комплексные числа 115
4.6. Пример: флеш 116
4.7. Битовые поля 120
4.8. Пример: двумерные динамические массивы 121
4.9. Практические замечания 124
Резюме 124
Упражнения 125
Глава 5
Сокрытие данных и функции-члены класса 131
5.1. Функции-члены класса 132
5.2. Доступ: закрытый и открытый 135
5.3. Классы 136
5.4. Область видимости класса 138
5.4.1. Оператор разрешения области видимости :: 138
5.4.2. Вложенные классы 139
5.5. Пример: пересмотрим флеш 140
5.6. Статические члены данных 142
5.7. Указатель this 143
5.8. Функции-члены типа static и const 144
5.8.1. Изменчивость (mutable) 146
5.9. Контейнеры и доступ к их содержимому 147
5.10. Практические замечания 149
Резюме 150
Упражнения 151
Глава 6
Создание и уничтожение объектов 155
6.1. Классы с конструкторами 156
6.1.1. Конструктор по умолчанию 157
6.1.2. Инициализатор конструктора 157
6.1.3. Конструкторы как преобразования 158
6.2. Создание динамического стека 159
6.2.1. Копирующий конструктор 160
6.3. Классы с деструкторами 161
6.4. Пример: динамически размещаемые строки 162
6.5. Класс vect 166
6.6. Члены данных, являющиеся классами 168
6.7. Пример: односвязный список 169
6.8. Двумерные массивы 173
6.9. Многочлен как связный список 174
6.10. Строки, использующие семантику ссылок 179
6.11. В отсутствии конструктора, копирующий конструктор и другие
тайны
181
6.11.1. Деструкторы: некоторые детали 182
6.12. Практические замечания 182
Резюме 183
Упражнения 184
Глава 7
Ad hoc полиморфизм 191
7.1. Преобразования АТД 192
7.2. Перегрузка и выбор функций 193
7.3. Дружественные функции 195
7.4. Перегрузка операторов 197
7.5. Перегрузка унарных операторов 199
7.6. Перегрузка бинарных операторов 201
7.7. Перегрузка операторов присваивания и индексирования 202
7.8. Многочлены: что можно ждать от типа и языка 206
7.9. Перегруженные операторы ввода-вывода « и » 207
7.10. Перегрузка оператора () для индексирования 208
7.11. Операторы указателей 210
7.11.1. Указатель на член класса 212
7.12. Перегрузка new и delete 214
7.13. Практические замечания 216
7.13.1. Соответствие сигнатуре 217
Резюме 218
Упражнения 220
Глава 8
Перебор: итераторы и контейнеры 227
8.1. Перебор 227
8.2. Итераторы 228
8.3. Пример:quicksort() 229
8.4. Дружественные классы и итераторы 232
8.5. Обобщенное программирование с использованием void* 234
8.6. Список и итератор списка 236
8.7. Практические замечания 239
Резюме 240
Упражнения 241
Глава 9
Шаблоны, обобщенное программирование и STL 245
9.1. Шаблонный класс stack 245
9.2. Шаблоны функций 247
9.2.1. Соответствие сигнатуре и перегрузка 249
9.3. Шаблоны классов 250
9.3.1. Друзья 250
9.3.2. Статические члейы 250
9.3.3. Аргументы шаблона класса ——
250
9.4. Параметризация класса vector 251
9.5. Параметризация quicksort^) 254
9.6. Параметризованное дерево двоичного поиска 255
9.7. STL 259
9.8. Контейнеры 260
9.8.1. Последовательные контейнеры 262
9.8.2. Ассоциативные контейнеры 263
9.8.3. Адаптеры контейнеров 265
9.9. Итераторы 267
9.9.1. Итераторы istream_iterator и ostream_iterator 268
9.9.2. Адаптеры итераторов 269
9.10. Алгоритмы 269
9.10.1. Алгоритмы сортировки 270
9.10.2. Не изменяющие последовательность алгоритмы 270
9.10.3. Изменяющие последовательность алгоритмы 271
9.10.4. Численные алгоритмы 272
9.11. Функции 273
9.12. Адаптеры функций 275
9.13. Практические замечания 276
Резюме 276
Упражнения 277
Глава 10
Наследование 281
10.1. Производный класс 282
10.2. Преобразования типов и видимость 284
10.3. Повторное использование кода: класс двоичного дерева 286
10.4. Виртуальные функции 289
10.5. Абстрактные базовые классы 293
10.6. Шаблоны и наследование 297
10.7. Множественное наследование 299
10.8. Наследование и проектирование 301
10.8.1. Форма подтипов 302
10.9. Идентификация типа на этапе выполнения 304
10.10. Практические замечания 305
Резюме 306
Упражнения 307
Глава 11
Исключения 311
11.1. Использование assert.h 311
11.2. Использование signal.h 312
11.3. Исключения C++ 316
11.4. Запуск исключений 317
11.4.1. Перезапуск исключений 318
11.4.2. Выражения исключений 319
11.5. Пробные блоки try 319
11.6. Обработчики 320
11.7. Спецификация исключения 321
11.8. terminate() и unexpected() 321
11.9. Пример кода с исключениями 322
11.10. Стандартные исключения и их использование 324
11.11. Практические замечания 325
Резюме 326
Упражнения 328
Глава 12
ООП на C++ 331
12.1. Требования к языку ООП 331
12.2. АТД в не-ООП языках 332
12.3. Клиенты и производители 333
12.4. Повторное использование кода и наследование 334
12.5. Полиморфизм 335
12.6. Сложность языка 336
12.7. Успех ООП на C++ 337
12.8. Платонизм: проектирование «tabula rasa» 338
12.9. Принципы проектирования 340
12.10. Схемы, диаграммы и инструменты 341
12.11. Штампы проектирования 343
12.12. C++: критика 343
Резюме 345
Упражнения 346
Приложение А
Коды символов ASCII 349
Приложение В
Приоритет и порядок выполнения операторов 351
Приложение С
Руководство по языку 353
С.1. Структура программы 353
С.2. Лексические элементы 353
С.2.1. Комментарии 354
С.2.2. Идентификаторы 354
С.2.3. Ключевые слова 355
С.3. Константы 355
С.4. Объявления и правила области видимости 357
С.5. Пространства имен 359
С.6. Правила компоновки 360
С.7. Типы 362
С.8. Приведения и правила преобразований 364
С.9. Выражения и операторы 367
С.9.1. Выражения sizepf 367
С.9.2. Выражения автоинкремента и автодекремента 368
С.9.3. Арифметические выражения 368
С.9.4. Выражения отношения, равенства и логические выражения 368
С.9.5. Выражения присваивания 369
С.9.6. Выражения с запятой 370
С.9.7. Условные выражения 370
С.9.8. Выражения с битовыми операторами 371
С.9.9. Выражения с определением адреса и обращением по адресу 371
С.9.10. Выражения с new и delete 372
С.9.11. Другие выражения 374
С.10. Инструкции 375
С.10.1. Инструкции-выражения 376
С.10.2. Составная инструкция 376
С.10.3. Инструкции if и if-else 377
С.10.4. Инструкция while 377
С.10.5. Инструкция for 377
С.10.6. Инструкция do 378
С.10.7. Инструкции break и continue 379
С.10.8. Инструкция switch 379
С.10.9. Инструкция goto 380
С.10.10. Инструкция return 381
С.10.11. Инструкция-объявление 381
С.11. Функции 381
С.11.1. Прототипы 382
С.11.2. Вызов по ссылке 383
С.11.3. Встроенные функции 383
С.11.4. Аргументы по умолчанию 383
С.11.5. Перегрузка 383
С.11.6. Типобезопасная компоновка для функций 385
С.12. Классы 385
С.12.1. Конструкторы и деструкторы 386
С.12.2. Функции-члены 387
С.12.3. Дружественные функции 387
С.12.4. Указатель this 388
С. 12.5. Перегрузка операторов 388
С.12.6. Функции-члены типа static и const 390
С.12.7. Изменчивость (mutable) 391
С.12.8. Проектирование классов 391
С.13. Наследование 391
С.13.1. Множественное наследование 393
С.13.2. Вызов конструктора 394
С.13.3. Абстрактные базовые классы 394
С.13.4. Указатель на член класса 394
С.13.5. Идентификация типа на этапе выполнения 394
С.13.6. Виртуальные функции 395
С.14. Шаблоны 396
С.14.1. Параметры шаблона 397
С.14.2. Шаблоны функций 398
С.14.3. Друзья 399
С.14.4. Статические члены 399
С.14.5. Специализация 400
С. 15. Исключения 400
С.15.1. Запуск исключений 401
С.15.2. Пробные блоки try 402
С.15.3. Обработчики 403
С.15.4. Спецификация исключения 403
С.15.5. terminate() и unexpected() 404
С.15.6. Стандартные библиотечные исключения 404
С.16. Предосторожности, связанные с совместимостью 404
С.16.1. Объявления вложенных классов 405
С.16.2. Совместимость типов 405
С.16.3. Разное 405
С.17. Новые возможности C++ 406
Приложение D
Ввод-вывод 407
D.1. Класс вывода ostream 407
D.2. Форматированный вывод и iomanip.h 408
D.3. Пользовательские типы: вывод 410
D.4. Класс ввода istream 412
D.5. Файлы 413
D.6. Использование строк как потоков 415
D.7. Функции и макро в ctype.h 416
D.8. Использование состояния потока 417
D.9. Совместное использование библиотек ввода-вывода 419
Приложение Е
STL и строковые библиотеки 421
Е.1. Контейнеры 421
Е.1.1. Последовательные контейнеры 423
Е.1.2. Ассоциативные контейнеры 423
Е.1.3. Адаптеры контейнеров 424
Е.2. Итераторы 426
Е.2.1. Категории итераторов 426
Е.2.2. Итератор istream_iterator 427
Е.2.3. Итератор ostream_iterator 427
Е.2.4. Адаптеры итераторов 427
Е.3. Алгоритмы 428
Е.3.1. Алгоритмы сортировки 428
Е.3.2. Не изменяющие последовательность алгоритмы 431
Е.3.3. Изменяющие последовательность алгоритмы 432
Е.3.4. Численные алгоритмы 434
Е.4. Функции 435
Е.4.1. Адаптеры функций 436
Е.5. Распределители памяти 437
Е.6. Строковая библиотека 438
Е.6.1. Конструкторы 439
Е.6.2. Функции-члены 440
Е.6.3. Глобальные операторы 443
Литература 445
Предметный указатель 447
Предметный указатель
Символы
, (запятая) 370
! 51, 369
!= 51
#define, директива 76, 357
#include, директива 357
& 53, 83, 371
&& 51
() 53, 198, 208, 374
- 53, 84, 86, 371, 374
++ 54, 368
- 54, 368
-> 109, 198, 210, 374
->* 212, 394
.* 212, 394
/* 38, 354
// 20, 38, 354
: : 358; 375
< 51
<< 207, 407, 408
<= 51
- 198
= = 51
> 51
>= 51
>> 208, 407, 412
?: 370
[] 53, 89, 198, 374 '
0 24, 162, 412
{} 55, 375, 376
| | 51
- 24, 155
A
abstract base class 394
abstract class 293
abstract data type 18
accessor function 150
accumulate(), функция 30, 259, 272
Ada 332, 336
adaptor 265, 424
adaptor pattern 393
address operator 83
ALGOL 343, 345
alias 90
allocate(), функция 122
allocator 437
anonymous namespace 83
area(), функция 33
array 86
array_2d, программа 123
ASCII, таблица символов 349
assert, макро 93, 311
assert.h 93, 311
assertion 92, 311
assign(), функция 22, 117
auto
класс памяти 78
ключевое слово 363
avg_arr(), функция 75
B
bad_alloc
исключение 324, 374
класс 325, 404
bad_cast
исключение 324
класс 325, 404
bad_typeid, класс 325, 404
begin(), функция 30
bitfield 120
bool, тип 51, 362, 368
break 58, 379
C
call-by-reference 84
call-by-value 42, 70
calling environment 69
case 59, 379
CASE-средства 341
cast 47, 364, 385
cast away constness 48, 365
catch 34
ключевое слово 316
обработчик 320
caux 413
cctype 416
cerr 407, 413
ch_stack(), функция 111
char*, тип 94
checks.h 312
cin 412, 413
class, ключевое слово 136, 282, 391
class-responsibility-collaboration 341
client 333
clog 413
CLOS 344
close(), функция 414
COBOL 332, 343
coercion 335
comp(), функция 256
completeness 340
complex 83
complex.h 83, 360
computer assisted software engineering
(CASE) 341
const 144
ключевое слово 357, 363, 390
модификатор 82
const-correctness 144
const_cast, приведение 48, 146, 365,
391
constructor 23, 148, 155, 386
initializer 157
container 110
container
class 227
continue 59, 379,
copy
constructor 160
copy(), функция 271
cout 20, 407, 413
cprn 413
CRC-карточки 341
cstddef 268, 427
cstdio 41
cstring 86, 94, 162
cstring.h 86
ctype.h 407, 416
D
DAG 299, 393
dec, манипулятор 409
deep copy 161
default 59, 379
default argument 74
deferred method 293
define, макро 247
delete 24, 95, 96, 214, 215, 372
deque 260, 421
dereferencing 84
design pattern 343
destructor 23, 155, 386,
difference_type 437
directed acyclic graph 299, 393
do 57, 378
down-cast 304
dymamic array 121
dynamic_cast 48
оператор 304, 394
приведение 365
E
Eiffel 344
element_lval(), функция 148
element_rval(), функция 148
empty, операция 110
encapsulation 19
end(), функция 30
endl 20
идентификатор 42
манипулятор 408
entity-relation 342
enum 49
enumerator 49
EOF 418
except.h 321, 404
exception 324
класс 325, 404
explicit, ключевое слово 23, 158, 183,
366
extern, ключевое слово 79, 361, 363
extraction 412
F
FILE, ТИП 333
find(), функция 271
find_max(), функция 122, 148
float.h 45
flush, манипулятор 408
for 56, 377
FORTRAN 332, 343, 345
free store 95, 372
free(), функция 214
friend .ключевое слово 25, 195, 387
fstream.h 413
full, операция 110
function
overriding 283, 305
prototype 72
библиотека 273, 435
G
garbage collection 179, 344
gcd(), функция 101
gen_tree, класс 256, 298
generic pointer 86
get from 412
goto 60, 380
grad_student, класс 31, 283
greater(), функция 92, 193
H
handler class 179
HASA, отношение 302, 342
Hello world! 20
hex, манипулятор 409
hierarchy 341
I
ICON 340
identifier 39
if 55, 377
if-else 55, 377
inclusion 336
index 87
inheritance 18, 281, 391
init(), функция 29
inline 20, 49, 76, 82, 134, 383
inner_product(), функция 272
insert(), функция 256, 287
insertion 407
interface inheritance 283
invertibility 340
iomanip.h 408, 409
ios, класс 414
iostream 20, 41, 83
iostream.h 20, 41, 83, 233, 301, 360,
407, 408, 419
ISA, отношение 283, 301, 342
istream, класс 412
istream_iterator 268, 427
istringstream 415
K
keyword 38
L
label 60, 380
last-in-first-out (LIFO) 109, 114, 334
length(), функция 22
LIKEA, отношение 286, 342
limits.h 45
linkage 82
LISP 332
list, класс 236, 260, 421
literal 39
living, класс 293
logic_error, класс 325, 404
lvalue 54, 90, 148
M
main(), функция 20
manipulator 20
manufacturer 333
map 260, 421
matrix, класс 173, 210
member function 133
memberwise initialization 161
memcpy(), функция 86, 161, 234
min(), функция 72, 73
mixin class 393
Modula-2 332, 336
Modula-3 336
mpy(), функция 197, 198
multimap 260, 421
multiple inheritance 393
multiset 260, 421
mutable, ключевое слово 146, 391
mutator 150
my_string, класс 22, 23, 164, 232
N
namespace 82
anonymous 83
scope 82
std 41, 360
NDEBUG, макро 93, 312
new 24, 95, 214, 372, 373
new.h 215, 374
null pointer constant 169
O
object 18
Occam's razor 340, 391
oct, манипулятор 409
open(), функция 414
operator, ключевое слово 25, 41, 192,
197, 388
operator+(), функция 27
operator=(), функция 204
order(), функция 85, 91
orthogonality 340
ostream, класс 407, 408
ostream_iterator 268, 427
ostringstream 415
out_of_range, класс 325, 404
overflow_error, класс 325, 404
overload 193
overloading 25, 75, 383
P
partition() 231, 254
Pascal 331, 332, 336
PL/1 332, 343
place_min(), функция 93
placement 214, 374
platonism 338
pointer 437
poker, программа 116, 119, 140
polymorphism 191
pop, операция 110
postcondition 311
precondition 311
prepend(), функция 176
print(), функция 22, 25, 30, 171
printf(), функция 73
priority_queue, контейнерный адаптер
265, 425
privacy 81
private 21, 135
ключевое слово 132, 282, 391
protected 21
ключевое слово 282, 132, 391
public 21, 31
ключевое слово 132, 282, 391
pure virtual function 293
push, операция 110
push_front(), функция 238
put to 407
Q
queue, контейнерный адаптер 265,
425
quicksort(), процедура 229, 254
R
raise(), функция 312
rand(), функция 118, 141
range_error, класс 325, 404
rational, программа 194
reference 437
reference counting 179
register, ключевое слово 79, 363
reinterpret_cast 48, 98, 365
release(), функция 171
return 20, 71, 381
reverse(), функция 28, 176, 271
ring(), функция 70
RTTI 304, 394
run-time type identification 304, 394
runt ime_error, класс 325, 404
rvalue 148
S
salary, программа 145, 390
scope 77, 138
scope resolution 133, 138
self-referential structure 169
set 260, 421
set_new_handler(), функция 374
shallow copy 161
shape, класс 33, 292
short-circuit evaluation 52
showhide, программа 213
signal, программа 314
signal(), функция 313
signal.h 312, 316
signature 76
signature matching algorithm 76
Simula 67 293, 332, 339
size_t, ran 86
size_type 437
sizeof 45, 53, 367
Slist 128, 169, 171
Smalltalk 21, 332, 344
SNOBOL 340
sort(), функция 30, 270
square, класс 34
sstream 415
stack
класс 245
контейнерный адаптер 265, 425
statement 53
static 80, 81, 142, 144, 363, 390
static_cast 47, 61, 365
stddef.h 86, 268, 427
stderr 407
stdin 412
stdio.h 41, 73, 333, 407, 419
stdlib.h 161
stdout 407
stepwise refinement 69
STL 29, 259, 421
Stl_vect, программа 262
strcpy(), функция 95
string 440
библиотека 20
string.h 94, 162, 333
strstream, класс 415
strstream.h 415
structure member 107
student, класс 31, 282
subscript 87
swap(), функция 231
switch 59, 60, 379, 380
T
tabula rasa, методика 338
tag name 49, 108
template 27
ключевое слово 245, 396
terminate(), функция 321, 404
this, указатель 143, 144, 388
throw
выражение 320
ключевое слово 34, 316
token 37, 353
top, операция 110
trivial conversion 217
try 34
type_info, класс 304, 394
type_info.h 304, 395
typedef, ключевое слово 108, 358, 361
type id, оператор 304, 394
typeinfo.h 304, 395
U
unexpected(), функция 321, 404
union 113
unsigned int, Тип 86
using, ключевое слово 20, 82, 360
V
value_type 437
vect, класс 166, 203
vector 260, 421
класс 228, 251
virtual 289, 292, 395
void 20, 70, 73, 86, 96
ключевое слово 86
тип 20
void* 86, 98, 234, 364
volatile, модификатор 217, 363
W
wchar_t, Тип 362
while 56, 377
WYSIWYG 335
X
xalloc, исключение 324, 374
A
абстрактный
базовый класс 33, 293, 394
класс 293
тип данных 18, 107, 131
автодекремент 368
автоинкремент 368
автоматический класс памяти 78
автоматическое преобразование
типов 47
агрегат данных 107
агрегатный тип struct 107
адаптер
для указателя на функцию 437
итератора 269, 427
контейнерный 265, 424
отрицающий 437
связывающий 275, 437
функции 275, 436
адаптерная схема 393
адаптирование структуры данных
188
алгоритм 269, 428
быстрой сортировки 429
выбора перегруженной
функции 193, 384, 399
изменяющий 271, 432
копирования элементов 432
копирования элементов,
обратный 433
накопления 434
неизменяющий 270, 431
обращения элементов 432
соответствия сигнатуре 76
сортировки 270, 428
сохраняющей сортировки 429
частичной сортировки 429
численный 272, 434
аргумент
по умолчанию 74, 383
шаблона 246, 250
арифметическое выражение 368
ассоциативный контейнер 260, 263,
421, 423
АТД 18, 107, 332
клиент АТД 131
поставщик АТД 131
Б
базовый адрес 88
массива 86
базовый класс 30, 281
виртуальный 301
безымянное
объединение 113
пространство имен 81, 83, 98
библиотека алгоритмов 269, 428
битовое поле 120
битовый оператор 53, 371
блок 55, 77, 78, 376
try 34, 316, 319, 402
быстрая сортировка 229
В
Вассермана-Пирчера диаграмма 342
ввод-вывод 41, 407
поток 413
смешанный 419
вектор 260, 262, 421, 423
виртуальная функция 281, 289, 395
чисто виртуальная 293
виртуальный базовый класс 301
включать как часть, отношение 168
включение 336
вложенный класс 139, 405
внешний класс памяти 79
внешняя переменная 79
возбуждение исключения 312, 401
вставка 407
встраивание 76
встроенная функция 20, 383, 416
выбор перегруженной функции 193
выбор члена структуры 108
вывод форматированный 408
вызов
деструктора 156, 161
конструктора 156
по значению 42, 70, 98
по ссылке 84, 85, 98, 383
функции 21, 69
вызывающее окружение 69
выражение 50
throw 320
арифметическое 368
исключения 319
присваивания 369
смешанное 46
вычисление по короткой схеме 52
Г
глобальная переменная 79
глобальное имя 77
глубокая копия 161
Д
двусторонняя очередь 260, 262, 421,
423
декремент 54
постфиксная форма 54
префиксная форма 54
дерево двоичного поиска 255, 287
деструктор 23, 24, 155, 161, 182, 386
вызов 156, 161
диаграмма Вассермана-Пирчера 342
диапазон значений с плавающей
точкой 45
диапазон целых значений 45
динамический массив 121
директивы
#define 76, 357
#include 20, 357
дисциплина программирования 331
доступ
закрытый 135, 136, 137
к статическим членам данных
143
дружественная функция 195, 250,
387, 399
шаблонного класса 250
дружественный итератор 232
дружественный класс 232
З
заголовок функции 70
законченность 340
закрытость 81
закрытый член 135
замещение функции 283, 305
запуск исключения 317, 401
знаки пунктуации 41
И
идентификатор 39, 354
cout 20
endl 20, 42
идентификация типа на этапе
выполнения 304, 394
иерархичность 341
иерархия 30
иерархия типов 302
извлечение 412
изменчивость 146, 391
изменяющий алгоритм 271, 432
именующее выражение, lvalue 54, 90
имя
глобальное 77
структуры 108
теговое 49, 108
индекс 87
индексирование 87
инициализатор 46
конструктора 157
инициализация 45, 82
массива 88
почленная 161
инкапсуляция 19, 21
инкремент 54
постфиксная форма 54
префиксная форма 54
инстанцирование типа 245
инструкция 53, 375
{} 55
break 58, 379
continue 59, 379
do 57, 378
for 56, 377
goto 60, 380
if 55, 377
if-else 55, 377
return 20, 71, 381
switch 58, 59, 60, 379, 380
while 56, 377
ввода 42
вывода 42
множественная 375
составная 55, 376
инструкция-выражение 376
инструкция-объявление 381
интерфейс контейнера STL 421
интерфейс типа 150
интерфейсное наследование 283
исключение 34, 311, 312, 316, 400
возбуждение 401
выражение 319
запуск 317, 401
обработчик 317, 403
перезапуск 318, 402
спецификация 321, 403
стандартное 324, 404
функция terminate() 321, 404
функция unexpected() 321, 404
итератор 228, 267, 422, 426
istream_iterator 268, 427
ostream_iterator 268, 427
ввода 267, 426
вывода 267, 426
двусторонний 267, 426
дружественный 232
произвольного доступа 267, 426
прохода вперед 267, 426
списка 236
К
класс 21, 131, 341, 385
bad_alloc 325, 404
bad_cast 325, 404
bad_typeid 325, 404
clock 199
exception 325, 404
gen_tree 256, 298
grad_student 31, 283
ios 414
istream 412
list 236
living 293
logic_error 325, 404
matrix 173, 196, 210
my_string 22, 23, 164, 179, 232
ostream 407, 408
out_of_range 325, 404
overflow_error 325, 404
polynomial 175
range_error 325, 404
runtime_error 325, 404
shape 33, 292
square 34
stack 245
strstream 415
student 31, 282
type_info 304, 394
vect 166, 196, 203
vector 228, 251
абстрактный 293
абстрактный базовый 33, 293,
394
базовый 30, 281
ввода 412
виртуальный базовый 301
вложенный 139, 405
вывода 407
двоичного дерева 286
деструктор 155, 386
дружественный 232
конструктор 155, 386
контейнерный 147, 227
наследование 281, 391
область видимости 138
памяти 78, 363
производный 281, 282
управляющий 179
функция-член 132
шаблон 250
классы памяти
auto 78
extern 79
register 79
static 81
клиент
АТД 19, 131
класса 333
типа 22
ключевое слово 38, 355
auto 78, 363
catch 34, 316
class 132, 136, 282, 391
const 144, 357, 363, 390
delete 95, 372
enum 49
explicit 23, 158, 183, 366
extern 79, 361, 363
friend 25, 195, 387
inline 20, 49, 76, 82, 134, 383
mutable 146, 391
new 95, 372
operator 25, 192, 197, 388
private 132, 135, 282, 391
protected 132, 282, 391
public 21, 31, 132, 282, 391
register 79, 363, return 71
static 80, 8.1, 142, 144, 363, 390
struct 108, 109
template 27, 245, 396
this 143, 388
throw 34, 316
try 316
typedef 108, 358, 361
union 113
using 20, 82, 360
virtual 289, 292, 395
void 20, 73, 86
volatile 363
доступа 21, 132
коды ASCII 349
комментарий 20, 38, 354
комплексные числа 115
компоновка 82, 360, 385
константа 355
перечислимого типа 49, 357
символьная 40, 356
строковая 356
конструктор 23, 148, 155, 386, 394
вызов 156
инициализатор 157
инициализующий 156
как преобразование 158
копирующий 160, 386
копирующий по умолчанию 181
по умолчанию 157
контейнер 110, 147, 260, 421
ассоциативный 260, 263, 421,
423
последовательный 260, 262,
421, 423
контейнерный адаптер 265, 424
priority_queue 265, 425
queue 265, 425
stack 265, 425
контейнерный класс 27, 227
контроль постоянства 144
концепции ООП 19
копирующий конструктор 160, 164,
386
по умолчанию 181
копия
глубокая 161
поверхностная 161
корректность программы 92
Л
лезвие Оккамы, принцип 340, 391
лексема 37, 353
литерал 39
символьный 40
строковый 40, 94
логический оператор 52, 368
локальная область видимости 77
М
макро 76, 416
assert 93, 311
define 247
NDEBUG 93, 312
манипулятор 20, 42, 408
dec 409
endl 408
flush 408
hex 409
oct 409 массив 83, 86, 88
базовый адрес 86, 88, 95
динамический 121, 167
динамический двумерный 173
индекс 87
индексирование 87
инициализация 88
многомерный 95
одномерный 166
передача функциям 89
превышение границ 88
матрица 121, 173
метка 60, 380
case 59, 379
default 59, 379
метод 21, 291
отложенный 293
пошагового уточнения 69
методология ООП 30, 282, 335
многомерный массив 95
многочлен 174, 206
разбросанный 174
сложение многочленов 175
множественное наследование 299,
302, 393
множество 260, 421, 423
модификатор 150, 159
const 82
volatile 217
мультимножество 260, 421, 423
мультиотображение 260, 421, 423
Н
наследование 18, 30, 281, 297, 301,
334, 335, 391
интерфейсное 283
множественное 299, 302, 393
одиночное 302
порядок выполнения
конструкторов 301
реализации 286
неизменяющий алгоритм 270, 431
непрямое обращение 84
О
область видимости 77, 81
глобальная 358
класса 138, 358
локальная 77
пространства имен 82, 358
прототипа функции 358
файла 77, 358
функции 358
обобщенное программирование 234
обобщенный указатель 86, 364
обозримость 81
обработка
исключений 34, 316, 317
сигнала 313
обработчик 320, 403
установка 313
обратимость 340
объединение 113
безымянное 113
объект 18, 23, 155
объект-функция 273, 274, 435
объектно-ориентированное
программирование 17, 18, 331,
337
концепции 19
преимущества 35
объектно-ориентированное
проектирование 282, 335
методология 30
объявление 357, 358
переменной 45
ссылки 90
одиночное наследование 302
Оккамы принцип 340, 391
оператор 41, 351, 367
, (запятая) 54, 370
! 369
& 53, 83, 371
() 53, 198, 208, 374
- 53, 84, 371 + + 54
- 54
-> 109, 198, 210
->* 212, 394
. (выбора члена) 23, 108
.* 212, 394
: : 358
; (точка с запятой) 54
<< 207, 407, 408
- 198
>> 208, 407, 412
?: 52
[] 53, 198, 374
delete 24, 95, 96, 215, 372
dynarpic_cast 304, 394
new 24, 95, 372
sizeof 45, 53, 367
switch 114
typeid 304, 394
автодекремента 368
автоинкремента 368
битовый 53, 371
вставка 407
выбора члена структуры 108
вызова функции 53, 208, 374
декремента 54
доступа к члену структуры 23
завершение инструкции 54
индекисрования 374
индексация массива 53
инкремента 54
логические 51, 52, 368
обращения по адресу 53, 371
определения адреса 53, 83, 371
отношения 368
отрицания 369
перегруженный 198
получить из 412
поместить в 407
порядок выполнения 367
приоритет выполнения 367
равенства 51, 368
разрешения области видимости
133, 134, 138, 358, 374
разыменования 53, 84
сравнения 51
указателя на член 374
указателя структуры 109, 210
условные 52, 370
определение 357
функции 70
организация программы 43, 353
ориентированный ациклический граф
(DAG) 299, 393
ортогональность 340
ответственность 341
отложенный метод 293
отмена постоянства 48, 146, 365, 391
отношение «включать как часть» 168
отображение 260, 421, 423
отрицающий адаптер 437
очередь 266, 425
двусторонняя 260, 421
П
параметр
вызываемый по значению 70
формальный 70
шаблона 397
шаблона класса 276
шаблона функции 276
параметризация 251, 254
параметрический полиморфизм 27,
245, 336
первым вошел, последним вышел
(ПРО) 109
перебор 227
перегруженная функция 193
алгоритм выбора 250, 399
перегруженный оператор 198
перегрузка 25, 335
функции 75, 193, 383
перегрузка оператора 198, 388
() 208
-> 211
<< 207
>> 208
delete 214
new 214
бинарного 201
индексирования 202
присваивания 202
указателя структуры 211
унарного 199
перезапуск исключения 318, 402
переменная
внешняя 79
глобальная 79
объявление 45
сокрытие имени 77
перехватчик catch 402
перечисление 357
перечислимая константа 49, 357, 361
перечислимый тип 49
платонизм, философия
проектирования 338, 346
поверхностная копия 161
поверхностное копирование 181
повторное использование кода 286,
334, 343
повышение типа 47, 193, 385
подавленное приведение 304
подсчет ссылок 179
подтип 284, 302, 336
поиск строк 442
полиморфизм 32, 191, 335, 336
параметрический 245, 336
чистый 281, 289
полиморфная функция 32
полином 174
получить из 412
поместить в 407
понижение типа 47
порядок выполнения конструкторов
301
последовательный контейнер 260,
262, 421, 423
поставщик АТД 131
постоянная нулевого указателя 169
постусловие 92, 311
поток
ввода-вывода 413
состояние 417
почленная инициализация 161
пошаговое уточнение 69
превышение границ массива 88
предусловие 92, 311
преобразование 364
преобразование типа 46, 47, 191, 284
автоматическое 47
АТД 192
неявное 192
от void* 98
тривиальное 217
явное 192
препроцессор 77
приведение 364, 365
подавленное 304
принудительное 335
приведение типов 47, 385
cast 47
const_cast 48
dynamic_cast 48
reinterpret__cast 48, 98
static_cast 47, 61
отмена постоянства 48
принудительное приведение 335
принцип черного ящика 333
принципы проектирования 340
приоритет и порядок выполнения
операторов 367
приоритетная очередь 425
присваивание 53, 369, 376
пробный блок 316, 319, 401
проверка утверждения 92, 311
программа 19, 20, 42, 43, 353
корректность 92
элемент 37, 353
программирования дисциплина 331
программы 216
acc_mod.cpp 305
аdd3.срр 73
array.срр 397
array_2d.cpp 122
array_tm.cpp 251
avg_arr.cpp 75
bad_cast.cpp 324
basic_i.cpp 412
basic_o.cpp 408
bell.cpp 70
bellmult.cpp 71
c_pair.cpp 143
call_ref.cpp 84
catch.cpp 320, 403
ch_stacl.cpp 112
ch_stacl.h 110
ch_stac4.cpp 160, 161
ch_stac4.h 159, 161
ch_stac2.h 132
ch_stac3.cpp 136
ch_stac3.h 135
cir_main.cpp 80
circle3.cpp 80
clock.cpp 199, 201, 218
coerce.cpp 251
complexl.cpp 115
complex2.cpp 137
complexc.cpp 388
copy1.cpp 248
copy2.cpp 248
count.с 64
dbl_sp.cpp 414
def_args.cpp 74
dinner.cpp 21
do_test.cpp 58
dynarray.cpp 96
enum_tst.cpp 50
except.cpp 324
for_test.cpp 57, 58, 59
forloop.cpp 378
gcd.cpp 43
genstack.h 235
gentreel.cpp 256, 258
gentree2.cpp 288
gentree2.h 287
goto_tst.cpp 60
greater.cpp 92
hello.cpp 19
how_many.cpp 138
if_test.cpp 55
inline_t.cpp 76, 77
io.cpp 42
list2.h 236, 237, 238, 239, 240
m_to_k.cpp 48
manip.cpp 409
matrix1.cpp 173
matrix2.cpp 196
matrix3.cpp 208
memcopy.cpp 234
min_dbl.cpp 72
min_int.cpp 72
mix_io.cpp 419
modulo.cpp 156
month.cpp 236
mutable.cpp 146
namespacicpp 83
nested .cpp 139
order.cpp 91, 93
over_new.cpp 215
pairvect.cpp 168
poker.cpp 116
poker1.cpp 107
poker2.cpp 140
poly1.cpp 174
poly2.cpp 206
pr_card.cpp 410
pr_card2.cpp 411
predator.cpp 293
printabl.cpp 158
quiksort.cpp 254
rational.cpp 193, 208
salary.cpp 145, 390
scope_t.cpp 77, 78
scope 1.cpp 359
set.cpp 121
shape 1.cpp 33
shape2.cpp 292
showhide.cpp 212
signal.cpp 313
slist.cpp 169, 170, 172
srl_list.cpp 29
stack_t1.cpp 246, 396
stack_t2.cpp 298
stack_t3.cpp 299
stackex.cpp 34
stat_tst.cpp 81
stcast.cpp 365
stl_adap.cpp 275
stl_age.cpp 264
stl_cont.cpp 259
stl_deq.cpp 260
stl_find.cpp 271
stl_func.cpp 274
stl_iadp.cpp 269
stl_io.cpp 268
stl_numr.cpp 273
stl_revr.cpp 271
stl_sort.cpp 270
stl_stak.cpp 266
stl_vect.cpp 262
str_func.cpp 94
str_strm.cpp 416
string 1.cpp 22
string2.cpp 23
string3.cpp 25
string4.cpp 26
string5.cpp 162, 165
string6.cpp 179
string7.cpp 192, 206
string8.cpp 234
string8.h 232, 233
stringt.cpp 438
studentl.cpp 30
student2.cpp 285
student2.h 282-285
sum_arrl.cpp 87
sum_arr2.cpp 89
sum_arr3.cpp 90
swap.cpp 249, 398
switch_t.cpp 59
throw_it.cpp 401
throw l.cpp 317
throw2.cpp 318
tracking.cpp 181
triple.cpp 211
tstack.cpp 27
twod.cpp 147
typeid.cpp 304
union.cpp 113
vect_bnd.cpp 392
vect_ex2.cpp 400
vect_it.cpp 253
vect_it.h 251
vect_ovl.cpp 389
vect1.h 166
vect2.h 203
vect3.h 315, 385
vect4.cpp 322
vect4.h 316, 322
vectacum.cpp 229
vector.h 228, 229
vectsort.cpp 230
virt_err.cpp 291
virt_sel.cpp 290
weekend.cpp 113
while_t.cpp 56
word_cnt.cpp 418
проектирование 301, 340
штамп 343
производитель
АТД 131
класса 333
производный класс 281, 282, 283
простой тип 37, 44
пространство имен 20, 41, 82, 359,
360
namespace std 360
безымянное 81, 83, 98
прототип функции 72, 382
список объявлений аргументов
73
псевдоним 90
пунктуация 41
Р
разбросанный многочлен 174
размещение 214, 374
разрешение области видимости 133,
138
разыменование указателя 86, 371
раскрытие макро 76
распределитель памяти 437
расширение типа 47
расширяемость типов 21, 37
регистровый класс памяти 79
С
сборка мусора 179, 344
свободная память 95, 372
связывающий адаптер 275, 437
сигнал 313
сигнатура функции 32, 76, 384
символ конца строки, 0 24
символьная константа 40, 356
символьный литерал 40
сложение многочленов 175
методом сортировки со
слиянием 177
смесь 302
смешанное выражение 46
совместимость
с языком С 404
типов 405
сокрытие
данных 132, 136
имени переменной 77
сообщение 21, 291
сортировка, быстрая 229
составная инструкция 55, 376
состояние потока 417
сотрудничество 341
специализация шаблона 400
спецификация исключения 321, 403
списки 30, 47, 282, 320, 335, 364, 402
STL: адаптеры итераторов 427
адаптеры функций 275, 437
алгоритм выбора
перегруженной функции 193,
250, 384, 399
виды объектов-функций 274,
435
вызов по ссылке с
использованием указателей 85
интерфейсы типичных
контейнеров STL 260, 421
использование копирующего
конструктора 164, 386
использование функций в C++
305
как работает инструкция switch
60, 380
категории библиотеки
алгоритмов STL 269, 428
концепции ООП 19
некоторые функции из
библиотеки cstring 94
операции над списком 169
организация программы на C++
43, 353
порядок выполнения
конструкторов 301, 394
преимущества использования
производных классов 283
различия в типах по сравнению
с ANSI С 405
типы полиморфизма 335
характеристики языка ООП 331
черный ящик в понимании
клиента 334
черный ящик в понимании
производителя 334
штампы проектирования в этой
книге 343
элементы штампа
проектирования 343
список 236, 260, 262, 421, 423
сравнение строк 441
ссылка
объявление 90
подсчет 179
стандартная библиотека шаблонов
29, 259, 421
стандартное исключение 324, 404
стандартные файлы 413
стандартный выходной поток 407
статический
класс памяти 81
член 250, 399
член данных 142
стек 79, 109, 110, 265, 425
LIFO 109
степень многочлена 174
Страуструп, Бьерн 17, 337
строгое соответствие 193
строка 439, 440
как поток 415
поиск строк 442
сравнение строк 441
строковая
библиотека 438
константа 356
строковый
литерал 40
тип 333
структура 21, 107
ch_stack 133, 136
listelem 237
slist 128
имя 108
оператор выбора члена 108
оператор указателя 109
программы 42
ссылающаяся на себя 169
член структуры 107
сужение типа 47
сущность-связь, модель 342
счетчик ссылок 179
Т
таблицы 349, 368, 369, 371, 431, 432,
433, 434
STL: адаптеры функций 437
STL: арифметические объекты
436
STL: библиотечные функции,
связанные с сортировкой 430
STL: библиотечные численные
функции 435
STL: логические объекты 436
STL: сравнивающие объекты
436
STL: функции адаптированного
стека 266, 425
STL: функции адаптированной
очереди 266, 425
STL: функции приоритетной
очереди 425
STL: функции-члены вставки
и удаления 265, 424
STL: функции-члены
распределителей
памяти 437, 438
typedef 358
автоинкремент и автодекремент
368
арифметические выражения 368
ассоциативные конструкторы
STL 264, 424
битовый оператор 53, 371
выражения sizeof 367
выражения присваивания 370
глобальные операторы,
перегруженные в string 443
закрытые члены данных класса
string 439
использование ключевого слова
const 357
классы памяти 363
ключевые слова 38, 355
конструкторы класса string 439
манипуляторы ввода-вывода
409
объекты-функции STL 274
объявления 47
объявления и инициализации
220
объявления и присваивания 109
объявления массивов 95
оператор delete 373
оператор new 372
операторы контейнера STL 423
определения ассоциативных
контейнеров STL 264, 423
определения контейнеров STL
261, 422
основные инструкции C++ 375
открытые функции-члены string
441
перечислимые константы 357
поисковые функции-члены
string 442
преобразующая функция
Bctype.h 417
приведения 366
пример строковой константы
356
примеры идентификаторов 354
примеры констант 355
примеры констант
с плавающей точкой 356
приоритет и порядок
выполнения
операторов 367
символьные константы 40, 356
сложность языка 336
стандартные файлы 413
суммирование элементов
массива 90
типы 363
тривиальные преобразования
217
файловые режимы 414
фундаментальные типы данных
44, 362
функции 381
функции и макро в ctype.h 416
функции состояния потока 417
функции-члены STL 424
характеристики функций 396
члены string, перегружающие
операторы 440
члены контейнера STL 261, 422
члены последовательных
контейнеров STL 263, 423
теговое имя 49, 108
тип
bool 362, 368
char* 94
FILE 333
size_t 86
string 440
struct 107
unsigned int 86
void 20, 70
wchar_t 362
автоматическое преобразование
47
возвращаемый функцией 70
идентификация на этапе
выполнения 304, 394
инстанцирование 245
интерфейс 150
перечислимый 49
повышение 47, 193, 385
понижение 47
преобразование 46, 47, 191
преобразование АТД 192
приведение 47
простой 37, 44
расширение 47
расширяемость 21, 37
строковый 333, 438
сужение 47
файловый 333
фундаментальный 44, 362
тривиальное преобразование типа
217
тройной условный оператор 52
У
указатель 83, 88, 371
this 143, 144, 388, 405
на член класса 212, 394
обобщенный 86, 364
разыменование 84
управляющий класс 179
условный оператор ? : 52, 370
установка обработчика 313
утверждение 92, 311
постусловие 92, 311
предусловие 92, 311
Ф
файл, область видимости 77
файловый тип 333
формальный параметр 70
форматированный вывод 408
фундаментальный тип 44, 362
функции
accumulate() 30, 259, 272
allocate() 122
area() 33
assign() 22, 117
avg_arr() 75
begin() 30
ch_stack() 111
close() 414
comp() 256
copy() 271
element_lval() 148
element_rval() 148
end() 30
find() 271
find_max() 122, 148
free() 214
gcd() 43, 101
greater (} 92, 193
init() 29
inner_product() 272
insert() 256, 287
length() 22
main() 20, 69
memcpy ( ) 86, 161, 234
min() 72, 73
mpy() 197, 198
open() 414
operator+() 27
operator=() 204
order() 85, 91
partition() 231, 254
place_min() 93
pr_message() 20
prepend() 176
print() 22, 25, 30, 171
printf() 73
push_front (} 238
quicksort() 254
raise() 312
rand() 118, 141
release() 171
reverse() 28, 176, 271
ring() 70
set_new_handler() 374
signal() 313
sort() 30, 270
strcpy() 95
swap() 231
terminate() 321, 404
unexpected() 321, 404
функция 69, 305, 381
аргумент по уполчанию 74
виртуальная 281, 289, 395
возвращаемый тип 70
встроенная 20, 383
вызов 21, 69
вызов по значению 70
вызов по ссылке 383
вызывающее окружение 69
доступа 150, 159
дружественная 195, 387, 399
дружественная, шаблонного
класса 250
заголовок 70
замещение '283, 305
определение 70
перегруженная 193
перегруженная, алгоритм
выбора 250, 399
перегрузка 75, 383
передача массива функции 89
полиморфная 32
преобразования типа 192
прототип 72, 382
с пустым списком параметров
73
сигнатура 32, 76, 384
чисто виртуальная 293
функция-модификатор 150, 159
функция-член 21, 132, 133, 134, 387
неявно встраиваемая 133
типа const 144
типа static 144
Ч
черный ящик 333, 334
численный алгоритм 272, 434
чисто виртуальная функция 293
чистый полиморфизм 281, 289
член
закрытый 135
объединения 113
структуры 107
член данных статический 142
Ш
шаблон 27, 297, 396
аргумент 246, 250
класса 250
параметр 397
специализация 400
функции 398
ширина битового поля 120
штамп проектирования 343
Э
элемент программы 37
Я
ядро языка 37
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp
Oop cpp

Mais conteúdo relacionado

Mais procurados

C++ весна 2014 лекция 2
C++ весна 2014 лекция 2C++ весна 2014 лекция 2
C++ весна 2014 лекция 2Technopark
 
Теория и практика обработки естественного языка
Теория и практика обработки естественного языкаТеория и практика обработки естественного языка
Теория и практика обработки естественного языкаNikolay Karpov
 
C++ осень 2013 лекция 7
C++ осень 2013 лекция 7C++ осень 2013 лекция 7
C++ осень 2013 лекция 7Technopark
 
C++ Базовый. Занятие 01.
C++ Базовый. Занятие 01.C++ Базовый. Занятие 01.
C++ Базовый. Занятие 01.Igor Shkulipa
 
C++ осень 2013 лекция 9
C++ осень 2013 лекция 9C++ осень 2013 лекция 9
C++ осень 2013 лекция 9Technopark
 
DUMP-2012 - Только хардкор! - "Расширяем PHP" Сергей Горшков (index.art)
DUMP-2012 - Только хардкор! - "Расширяем PHP" Сергей Горшков (index.art) DUMP-2012 - Только хардкор! - "Расширяем PHP" Сергей Горшков (index.art)
DUMP-2012 - Только хардкор! - "Расширяем PHP" Сергей Горшков (index.art) it-people
 
C# Desktop. Занятие 01.
C# Desktop. Занятие 01.C# Desktop. Занятие 01.
C# Desktop. Занятие 01.Igor Shkulipa
 
основы ооп на языке C#. часть 1. введение в программирование
основы ооп на языке C#. часть 1. введение в программированиеосновы ооп на языке C#. часть 1. введение в программирование
основы ооп на языке C#. часть 1. введение в программированиеYakubovichDA
 
Программирование на языке C Sharp (СИ решетка) ПРАКТИКУМ
Программирование на языке C Sharp (СИ решетка) ПРАКТИКУМПрограммирование на языке C Sharp (СИ решетка) ПРАКТИКУМ
Программирование на языке C Sharp (СИ решетка) ПРАКТИКУМAlexandr Konfidentsialno
 
Custom Language Plugin for JetBrains IDEA
Custom Language Plugin for JetBrains IDEACustom Language Plugin for JetBrains IDEA
Custom Language Plugin for JetBrains IDEAAlexander Zastashkov
 
Основы ооп на языке C#. Часть 2. базовый синтаксис.
Основы ооп на языке C#. Часть 2. базовый синтаксис.Основы ооп на языке C#. Часть 2. базовый синтаксис.
Основы ооп на языке C#. Часть 2. базовый синтаксис.YakubovichDA
 
Построение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кодаПостроение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кодаTatyanazaxarova
 

Mais procurados (14)

C++ весна 2014 лекция 2
C++ весна 2014 лекция 2C++ весна 2014 лекция 2
C++ весна 2014 лекция 2
 
Теория и практика обработки естественного языка
Теория и практика обработки естественного языкаТеория и практика обработки естественного языка
Теория и практика обработки естественного языка
 
C++ осень 2013 лекция 7
C++ осень 2013 лекция 7C++ осень 2013 лекция 7
C++ осень 2013 лекция 7
 
C++ Базовый. Занятие 01.
C++ Базовый. Занятие 01.C++ Базовый. Занятие 01.
C++ Базовый. Занятие 01.
 
C++ осень 2013 лекция 9
C++ осень 2013 лекция 9C++ осень 2013 лекция 9
C++ осень 2013 лекция 9
 
Java 9 - Back to the Future
Java 9 - Back to the FutureJava 9 - Back to the Future
Java 9 - Back to the Future
 
лек5 6
лек5 6лек5 6
лек5 6
 
DUMP-2012 - Только хардкор! - "Расширяем PHP" Сергей Горшков (index.art)
DUMP-2012 - Только хардкор! - "Расширяем PHP" Сергей Горшков (index.art) DUMP-2012 - Только хардкор! - "Расширяем PHP" Сергей Горшков (index.art)
DUMP-2012 - Только хардкор! - "Расширяем PHP" Сергей Горшков (index.art)
 
C# Desktop. Занятие 01.
C# Desktop. Занятие 01.C# Desktop. Занятие 01.
C# Desktop. Занятие 01.
 
основы ооп на языке C#. часть 1. введение в программирование
основы ооп на языке C#. часть 1. введение в программированиеосновы ооп на языке C#. часть 1. введение в программирование
основы ооп на языке C#. часть 1. введение в программирование
 
Программирование на языке C Sharp (СИ решетка) ПРАКТИКУМ
Программирование на языке C Sharp (СИ решетка) ПРАКТИКУМПрограммирование на языке C Sharp (СИ решетка) ПРАКТИКУМ
Программирование на языке C Sharp (СИ решетка) ПРАКТИКУМ
 
Custom Language Plugin for JetBrains IDEA
Custom Language Plugin for JetBrains IDEACustom Language Plugin for JetBrains IDEA
Custom Language Plugin for JetBrains IDEA
 
Основы ооп на языке C#. Часть 2. базовый синтаксис.
Основы ооп на языке C#. Часть 2. базовый синтаксис.Основы ооп на языке C#. Часть 2. базовый синтаксис.
Основы ооп на языке C#. Часть 2. базовый синтаксис.
 
Построение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кодаПостроение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кода
 

Semelhante a Oop cpp

Borland C++ Builder освой самостоятельно
Borland C++ Builder освой самостоятельноBorland C++ Builder освой самостоятельно
Borland C++ Builder освой самостоятельноStAlKeRoV
 
Автоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharpАвтоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharpGoSharp
 
Автоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharpАвтоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharpgeekfamilyrussia
 
Статья «Формирование универсальных требований к пользовательским программам п...
Статья «Формирование универсальных требований к пользовательским программам п...Статья «Формирование универсальных требований к пользовательским программам п...
Статья «Формирование универсальных требований к пользовательским программам п...ph.d. Dmitry Stepanov
 
Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)Alexander Babich
 
C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.Igor Shkulipa
 
пояснительная
пояснительнаяпояснительная
пояснительнаяDenis Redis
 
вопросы к зачетупп
вопросы к зачетуппвопросы к зачетупп
вопросы к зачетуппAnastasia Snegina
 
вопросы к зачетупп
вопросы к зачетуппвопросы к зачетупп
вопросы к зачетуппAnastasia Snegina
 
C++ осень 2012 лекция 1
C++ осень 2012 лекция 1C++ осень 2012 лекция 1
C++ осень 2012 лекция 1Technopark
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовYandex
 
Yuri Trukhin - Software developement best practices
Yuri Trukhin - Software developement best practicesYuri Trukhin - Software developement best practices
Yuri Trukhin - Software developement best practicesbeloslab
 
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25MoscowJS
 
redux: the best for isomorphic apps
redux: the best for isomorphic appsredux: the best for isomorphic apps
redux: the best for isomorphic appsDenis Izmaylov
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовYandex
 
Jbreak 2016: Твой личный Spring Boot Starter
Jbreak 2016: Твой личный Spring Boot StarterJbreak 2016: Твой личный Spring Boot Starter
Jbreak 2016: Твой личный Spring Boot StarterAleksandr Tarasov
 
C++ осень 2012 лекция 6
C++ осень 2012 лекция 6C++ осень 2012 лекция 6
C++ осень 2012 лекция 6Technopark
 

Semelhante a Oop cpp (20)

Borland C++ Builder освой самостоятельно
Borland C++ Builder освой самостоятельноBorland C++ Builder освой самостоятельно
Borland C++ Builder освой самостоятельно
 
Автоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharpАвтоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharp
 
прак 15.docx
прак 15.docxпрак 15.docx
прак 15.docx
 
пр 15.docx
пр 15.docxпр 15.docx
пр 15.docx
 
Автоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharpАвтоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharp
 
Статья «Формирование универсальных требований к пользовательским программам п...
Статья «Формирование универсальных требований к пользовательским программам п...Статья «Формирование универсальных требований к пользовательским программам п...
Статья «Формирование универсальных требований к пользовательским программам п...
 
Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)
 
C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.
 
пояснительная
пояснительнаяпояснительная
пояснительная
 
вопросы к зачетупп
вопросы к зачетуппвопросы к зачетупп
вопросы к зачетупп
 
вопросы к зачетупп
вопросы к зачетуппвопросы к зачетупп
вопросы к зачетупп
 
C++ осень 2012 лекция 1
C++ осень 2012 лекция 1C++ осень 2012 лекция 1
C++ осень 2012 лекция 1
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
 
Yuri Trukhin - Software developement best practices
Yuri Trukhin - Software developement best practicesYuri Trukhin - Software developement best practices
Yuri Trukhin - Software developement best practices
 
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
 
redux: the best for isomorphic apps
redux: the best for isomorphic appsredux: the best for isomorphic apps
redux: the best for isomorphic apps
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
 
лаф 2014
лаф 2014лаф 2014
лаф 2014
 
Jbreak 2016: Твой личный Spring Boot Starter
Jbreak 2016: Твой личный Spring Boot StarterJbreak 2016: Твой личный Spring Boot Starter
Jbreak 2016: Твой личный Spring Boot Starter
 
C++ осень 2012 лекция 6
C++ осень 2012 лекция 6C++ осень 2012 лекция 6
C++ осень 2012 лекция 6
 

Oop cpp

  • 1. А. Пол ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ НА C++ Книга Айры Пола, автора многих популярных изданий по С и C++, не является ни учебником по C++, ни курсом по объектно-ориентированному программированию (ООП) «вообще», хотя может быть полезна и в этих двух качествах. Задача книги (точно отраженная в названии) совершенно конкретна: научить читателя писать на C++ объектно-ориентированные программы. Для многих абстрактных идей и понятий ООП в C++ существуют конкретные воплощающие их конструкции. В каждой главе автор вводит и объясняет очередную «порцию» таких конструкций, демонстрирует технику их эффективного использования. В некоторых случаях возникающие перед программистом на C++ проблемы не могут быть непосредственно решены средствами языка. Здесь на помощь приходят разнообразные приемы, не владея которыми трудно программировать на C++ реальные задачи. Такие приемы поясняются автором на многочисленных примерах, причем наиболее показательные программы подвергаются тщательному разбору. Много внимания на страницах книги уделено самым последним дополнениям C++: стандартной библиотеке шаблонов (STL), пространствам имен (namespaces), механизму идентификации типов во время выполнения (RTTI), явным приведениям типов (cast-операторам) и другим. Книга в первую очередь рассчитана на программистов, желающих получить ясное представление о парадигме объектно-ориентированного программирования в C++. Издание также будет полезно преподавателям, студентам и всем, кто хочет освоить объектно-ориентированное программирование на C++. Содержание Предисловие 13 Глава 1 Зачем нужно объектно-ориентированное программирование на C++? 17 1.1. Объектно-ориентированное программирование 18 1.2. Пример программы на C++ 19 1.3. Инкапсуляция и расширяемость типов 21 1.4. Конструкторы и деструкторы 23 1.5. Перегрузка 25 1.6. Шаблоны и обобщенное программирование 27 1.7. Стандартная библиотека шаблонов (STL) 29 1.8. Наследование 30 1.9. Полиморфизм 32 1.10. Исключения в C++ 34 1.11. Преимущества объектно-ориентированного программирования 35 Глава 2 Собственные типы данных и инструкции 37 2.1. Элементы программы 37 2.1.1. Комментарии 38 2.1.2. Ключевые слова 38
  • 2. 2.1.3. Идентификаторы 39 2.1.4. Литералы 39 2.1.5. Операторы и знаки пунктуации 41 2.2. Ввод-вывод 41 2.3. Структура программы 42 2.4. Простые типы 44 2.4.1. Инициализация 45 2.5. Традиционные преобразования 46 2.6. Перечислимые типы 49 2.7. Выражения 50 2.8. Инструкции 53 2.8.1. Присваивание и выражения 53 2.8.2. Составная инструкция 55 2.8.3. Инструкции if и if-else 55 2.8.4. Инструкция while 56 2.8.5. Инструкция for 56 2.8.6. Инструкция do 57 2.8.7. Инструкции break и continue 58 2.8.8. Инструкция switch 59 2.8.9. Инструкция goto 60 2.9. Практические замечания 61 Резюме 61 Упражнения 63 Глава 3 Функции и указатели 69 3.1. Функции 69 3.1.1. Вызов функции 69 3.2. Определение функции 70 3.3. Инструкция return 71 3.4. Прототипы функций 72 3.5. Аргументы по умолчанию 74 3.6. Перегрузка функций 75 3.7. Встраивание 76 3.8. Область видимости и класс памяти 77 3.8.1. Класс памяти auto 78 3.8.2. Класс памяти register 79 3.8.3. Класс памяти extern 79 3.8.4. Класс памяти static 81 3.8.5. Таинства компоновки 82 3.9. Пространства имен 82 3.10. Типы указателей 83 3.10.1. Определение адреса и разыменование 84 3.10.2. Вызов по ссылке на основе указателей 84 3.11. Применение void 86
  • 3. 3.12. Массивы и указатели 86 3.12.1. Индексирование 87 3.12.2. Инициализация 88 3.13. Связь между массивами и указателями 88 3.14. Передача массивов функциям 89 3.15. Объявления ссылок и вызов по ссылке 90 3.16. Проверка утверждений и корректность программы 92 3.17. Строки: соглашение о char* 94 3.18. Многомерные массивы 95 3.19. Операторы свободной памяти new и delete 95 3.20. Практические замечания 98 3.20.1. void* и reinterpret_cast 98 3.20.2. Замена объявлений static extern 98 Резюме 99 Упражнения 100 Глава 4 Реализация АТД в базовом языке 107 4.1. Агрегатный тип struct 107 4.2. Оператор указателя структуры 109 4.3. Пример: стек 109 4.4. Объединения 113 4.5. Комплексные числа 115 4.6. Пример: флеш 116 4.7. Битовые поля 120 4.8. Пример: двумерные динамические массивы 121 4.9. Практические замечания 124 Резюме 124 Упражнения 125 Глава 5 Сокрытие данных и функции-члены класса 131 5.1. Функции-члены класса 132 5.2. Доступ: закрытый и открытый 135 5.3. Классы 136 5.4. Область видимости класса 138 5.4.1. Оператор разрешения области видимости :: 138 5.4.2. Вложенные классы 139 5.5. Пример: пересмотрим флеш 140 5.6. Статические члены данных 142 5.7. Указатель this 143 5.8. Функции-члены типа static и const 144 5.8.1. Изменчивость (mutable) 146 5.9. Контейнеры и доступ к их содержимому 147 5.10. Практические замечания 149 Резюме 150
  • 4. Упражнения 151 Глава 6 Создание и уничтожение объектов 155 6.1. Классы с конструкторами 156 6.1.1. Конструктор по умолчанию 157 6.1.2. Инициализатор конструктора 157 6.1.3. Конструкторы как преобразования 158 6.2. Создание динамического стека 159 6.2.1. Копирующий конструктор 160 6.3. Классы с деструкторами 161 6.4. Пример: динамически размещаемые строки 162 6.5. Класс vect 166 6.6. Члены данных, являющиеся классами 168 6.7. Пример: односвязный список 169 6.8. Двумерные массивы 173 6.9. Многочлен как связный список 174 6.10. Строки, использующие семантику ссылок 179 6.11. В отсутствии конструктора, копирующий конструктор и другие тайны 181 6.11.1. Деструкторы: некоторые детали 182 6.12. Практические замечания 182 Резюме 183 Упражнения 184 Глава 7 Ad hoc полиморфизм 191 7.1. Преобразования АТД 192 7.2. Перегрузка и выбор функций 193 7.3. Дружественные функции 195 7.4. Перегрузка операторов 197 7.5. Перегрузка унарных операторов 199 7.6. Перегрузка бинарных операторов 201 7.7. Перегрузка операторов присваивания и индексирования 202 7.8. Многочлены: что можно ждать от типа и языка 206 7.9. Перегруженные операторы ввода-вывода « и » 207 7.10. Перегрузка оператора () для индексирования 208 7.11. Операторы указателей 210 7.11.1. Указатель на член класса 212 7.12. Перегрузка new и delete 214 7.13. Практические замечания 216 7.13.1. Соответствие сигнатуре 217 Резюме 218 Упражнения 220 Глава 8 Перебор: итераторы и контейнеры 227
  • 5. 8.1. Перебор 227 8.2. Итераторы 228 8.3. Пример:quicksort() 229 8.4. Дружественные классы и итераторы 232 8.5. Обобщенное программирование с использованием void* 234 8.6. Список и итератор списка 236 8.7. Практические замечания 239 Резюме 240 Упражнения 241 Глава 9 Шаблоны, обобщенное программирование и STL 245 9.1. Шаблонный класс stack 245 9.2. Шаблоны функций 247 9.2.1. Соответствие сигнатуре и перегрузка 249 9.3. Шаблоны классов 250 9.3.1. Друзья 250 9.3.2. Статические члейы 250 9.3.3. Аргументы шаблона класса —— 250 9.4. Параметризация класса vector 251 9.5. Параметризация quicksort^) 254 9.6. Параметризованное дерево двоичного поиска 255 9.7. STL 259 9.8. Контейнеры 260 9.8.1. Последовательные контейнеры 262 9.8.2. Ассоциативные контейнеры 263 9.8.3. Адаптеры контейнеров 265 9.9. Итераторы 267 9.9.1. Итераторы istream_iterator и ostream_iterator 268 9.9.2. Адаптеры итераторов 269 9.10. Алгоритмы 269 9.10.1. Алгоритмы сортировки 270 9.10.2. Не изменяющие последовательность алгоритмы 270 9.10.3. Изменяющие последовательность алгоритмы 271 9.10.4. Численные алгоритмы 272 9.11. Функции 273 9.12. Адаптеры функций 275 9.13. Практические замечания 276 Резюме 276 Упражнения 277 Глава 10 Наследование 281 10.1. Производный класс 282 10.2. Преобразования типов и видимость 284
  • 6. 10.3. Повторное использование кода: класс двоичного дерева 286 10.4. Виртуальные функции 289 10.5. Абстрактные базовые классы 293 10.6. Шаблоны и наследование 297 10.7. Множественное наследование 299 10.8. Наследование и проектирование 301 10.8.1. Форма подтипов 302 10.9. Идентификация типа на этапе выполнения 304 10.10. Практические замечания 305 Резюме 306 Упражнения 307 Глава 11 Исключения 311 11.1. Использование assert.h 311 11.2. Использование signal.h 312 11.3. Исключения C++ 316 11.4. Запуск исключений 317 11.4.1. Перезапуск исключений 318 11.4.2. Выражения исключений 319 11.5. Пробные блоки try 319 11.6. Обработчики 320 11.7. Спецификация исключения 321 11.8. terminate() и unexpected() 321 11.9. Пример кода с исключениями 322 11.10. Стандартные исключения и их использование 324 11.11. Практические замечания 325 Резюме 326 Упражнения 328 Глава 12 ООП на C++ 331 12.1. Требования к языку ООП 331 12.2. АТД в не-ООП языках 332 12.3. Клиенты и производители 333 12.4. Повторное использование кода и наследование 334 12.5. Полиморфизм 335 12.6. Сложность языка 336 12.7. Успех ООП на C++ 337 12.8. Платонизм: проектирование «tabula rasa» 338 12.9. Принципы проектирования 340 12.10. Схемы, диаграммы и инструменты 341 12.11. Штампы проектирования 343 12.12. C++: критика 343 Резюме 345 Упражнения 346
  • 7. Приложение А Коды символов ASCII 349 Приложение В Приоритет и порядок выполнения операторов 351 Приложение С Руководство по языку 353 С.1. Структура программы 353 С.2. Лексические элементы 353 С.2.1. Комментарии 354 С.2.2. Идентификаторы 354 С.2.3. Ключевые слова 355 С.3. Константы 355 С.4. Объявления и правила области видимости 357 С.5. Пространства имен 359 С.6. Правила компоновки 360 С.7. Типы 362 С.8. Приведения и правила преобразований 364 С.9. Выражения и операторы 367 С.9.1. Выражения sizepf 367 С.9.2. Выражения автоинкремента и автодекремента 368 С.9.3. Арифметические выражения 368 С.9.4. Выражения отношения, равенства и логические выражения 368 С.9.5. Выражения присваивания 369 С.9.6. Выражения с запятой 370 С.9.7. Условные выражения 370 С.9.8. Выражения с битовыми операторами 371 С.9.9. Выражения с определением адреса и обращением по адресу 371 С.9.10. Выражения с new и delete 372 С.9.11. Другие выражения 374 С.10. Инструкции 375 С.10.1. Инструкции-выражения 376 С.10.2. Составная инструкция 376 С.10.3. Инструкции if и if-else 377 С.10.4. Инструкция while 377 С.10.5. Инструкция for 377 С.10.6. Инструкция do 378 С.10.7. Инструкции break и continue 379 С.10.8. Инструкция switch 379 С.10.9. Инструкция goto 380 С.10.10. Инструкция return 381 С.10.11. Инструкция-объявление 381 С.11. Функции 381 С.11.1. Прототипы 382 С.11.2. Вызов по ссылке 383
  • 8. С.11.3. Встроенные функции 383 С.11.4. Аргументы по умолчанию 383 С.11.5. Перегрузка 383 С.11.6. Типобезопасная компоновка для функций 385 С.12. Классы 385 С.12.1. Конструкторы и деструкторы 386 С.12.2. Функции-члены 387 С.12.3. Дружественные функции 387 С.12.4. Указатель this 388 С. 12.5. Перегрузка операторов 388 С.12.6. Функции-члены типа static и const 390 С.12.7. Изменчивость (mutable) 391 С.12.8. Проектирование классов 391 С.13. Наследование 391 С.13.1. Множественное наследование 393 С.13.2. Вызов конструктора 394 С.13.3. Абстрактные базовые классы 394 С.13.4. Указатель на член класса 394 С.13.5. Идентификация типа на этапе выполнения 394 С.13.6. Виртуальные функции 395 С.14. Шаблоны 396 С.14.1. Параметры шаблона 397 С.14.2. Шаблоны функций 398 С.14.3. Друзья 399 С.14.4. Статические члены 399 С.14.5. Специализация 400 С. 15. Исключения 400 С.15.1. Запуск исключений 401 С.15.2. Пробные блоки try 402 С.15.3. Обработчики 403 С.15.4. Спецификация исключения 403 С.15.5. terminate() и unexpected() 404 С.15.6. Стандартные библиотечные исключения 404 С.16. Предосторожности, связанные с совместимостью 404 С.16.1. Объявления вложенных классов 405 С.16.2. Совместимость типов 405 С.16.3. Разное 405 С.17. Новые возможности C++ 406 Приложение D Ввод-вывод 407 D.1. Класс вывода ostream 407 D.2. Форматированный вывод и iomanip.h 408 D.3. Пользовательские типы: вывод 410 D.4. Класс ввода istream 412
  • 9. D.5. Файлы 413 D.6. Использование строк как потоков 415 D.7. Функции и макро в ctype.h 416 D.8. Использование состояния потока 417 D.9. Совместное использование библиотек ввода-вывода 419 Приложение Е STL и строковые библиотеки 421 Е.1. Контейнеры 421 Е.1.1. Последовательные контейнеры 423 Е.1.2. Ассоциативные контейнеры 423 Е.1.3. Адаптеры контейнеров 424 Е.2. Итераторы 426 Е.2.1. Категории итераторов 426 Е.2.2. Итератор istream_iterator 427 Е.2.3. Итератор ostream_iterator 427 Е.2.4. Адаптеры итераторов 427 Е.3. Алгоритмы 428 Е.3.1. Алгоритмы сортировки 428 Е.3.2. Не изменяющие последовательность алгоритмы 431 Е.3.3. Изменяющие последовательность алгоритмы 432 Е.3.4. Численные алгоритмы 434 Е.4. Функции 435 Е.4.1. Адаптеры функций 436 Е.5. Распределители памяти 437 Е.6. Строковая библиотека 438 Е.6.1. Конструкторы 439 Е.6.2. Функции-члены 440 Е.6.3. Глобальные операторы 443 Литература 445 Предметный указатель 447 Предметный указатель Символы , (запятая) 370 ! 51, 369 != 51 #define, директива 76, 357 #include, директива 357 & 53, 83, 371 && 51 () 53, 198, 208, 374 - 53, 84, 86, 371, 374 ++ 54, 368 - 54, 368 -> 109, 198, 210, 374 ->* 212, 394 .* 212, 394 /* 38, 354 // 20, 38, 354 : : 358; 375 < 51 << 207, 407, 408 <= 51 - 198 = = 51 > 51 >= 51 >> 208, 407, 412
  • 10. ?: 370 [] 53, 89, 198, 374 ' 0 24, 162, 412 {} 55, 375, 376 | | 51 - 24, 155 A abstract base class 394 abstract class 293 abstract data type 18 accessor function 150 accumulate(), функция 30, 259, 272 Ada 332, 336 adaptor 265, 424 adaptor pattern 393 address operator 83 ALGOL 343, 345 alias 90 allocate(), функция 122 allocator 437 anonymous namespace 83 area(), функция 33 array 86 array_2d, программа 123 ASCII, таблица символов 349 assert, макро 93, 311 assert.h 93, 311 assertion 92, 311 assign(), функция 22, 117 auto класс памяти 78 ключевое слово 363 avg_arr(), функция 75 B bad_alloc исключение 324, 374 класс 325, 404 bad_cast исключение 324 класс 325, 404 bad_typeid, класс 325, 404 begin(), функция 30 bitfield 120 bool, тип 51, 362, 368 break 58, 379 C call-by-reference 84 call-by-value 42, 70 calling environment 69 case 59, 379 CASE-средства 341 cast 47, 364, 385 cast away constness 48, 365 catch 34 ключевое слово 316 обработчик 320 caux 413 cctype 416 cerr 407, 413 ch_stack(), функция 111 char*, тип 94 checks.h 312 cin 412, 413 class, ключевое слово 136, 282, 391 class-responsibility-collaboration 341 client 333 clog 413 CLOS 344 close(), функция 414 COBOL 332, 343 coercion 335 comp(), функция 256 completeness 340 complex 83 complex.h 83, 360 computer assisted software engineering (CASE) 341 const 144 ключевое слово 357, 363, 390 модификатор 82 const-correctness 144 const_cast, приведение 48, 146, 365, 391 constructor 23, 148, 155, 386 initializer 157 container 110 container class 227
  • 11. continue 59, 379, copy constructor 160 copy(), функция 271 cout 20, 407, 413 cprn 413 CRC-карточки 341 cstddef 268, 427 cstdio 41 cstring 86, 94, 162 cstring.h 86 ctype.h 407, 416 D DAG 299, 393 dec, манипулятор 409 deep copy 161 default 59, 379 default argument 74 deferred method 293 define, макро 247 delete 24, 95, 96, 214, 215, 372 deque 260, 421 dereferencing 84 design pattern 343 destructor 23, 155, 386, difference_type 437 directed acyclic graph 299, 393 do 57, 378 down-cast 304 dymamic array 121 dynamic_cast 48 оператор 304, 394 приведение 365 E Eiffel 344 element_lval(), функция 148 element_rval(), функция 148 empty, операция 110 encapsulation 19 end(), функция 30 endl 20 идентификатор 42 манипулятор 408 entity-relation 342 enum 49 enumerator 49 EOF 418 except.h 321, 404 exception 324 класс 325, 404 explicit, ключевое слово 23, 158, 183, 366 extern, ключевое слово 79, 361, 363 extraction 412 F FILE, ТИП 333 find(), функция 271 find_max(), функция 122, 148 float.h 45 flush, манипулятор 408 for 56, 377 FORTRAN 332, 343, 345 free store 95, 372 free(), функция 214 friend .ключевое слово 25, 195, 387 fstream.h 413 full, операция 110 function overriding 283, 305 prototype 72 библиотека 273, 435 G garbage collection 179, 344 gcd(), функция 101 gen_tree, класс 256, 298 generic pointer 86 get from 412 goto 60, 380 grad_student, класс 31, 283 greater(), функция 92, 193 H handler class 179 HASA, отношение 302, 342 Hello world! 20 hex, манипулятор 409 hierarchy 341 I ICON 340
  • 12. identifier 39 if 55, 377 if-else 55, 377 inclusion 336 index 87 inheritance 18, 281, 391 init(), функция 29 inline 20, 49, 76, 82, 134, 383 inner_product(), функция 272 insert(), функция 256, 287 insertion 407 interface inheritance 283 invertibility 340 iomanip.h 408, 409 ios, класс 414 iostream 20, 41, 83 iostream.h 20, 41, 83, 233, 301, 360, 407, 408, 419 ISA, отношение 283, 301, 342 istream, класс 412 istream_iterator 268, 427 istringstream 415 K keyword 38 L label 60, 380 last-in-first-out (LIFO) 109, 114, 334 length(), функция 22 LIKEA, отношение 286, 342 limits.h 45 linkage 82 LISP 332 list, класс 236, 260, 421 literal 39 living, класс 293 logic_error, класс 325, 404 lvalue 54, 90, 148 M main(), функция 20 manipulator 20 manufacturer 333 map 260, 421 matrix, класс 173, 210 member function 133 memberwise initialization 161 memcpy(), функция 86, 161, 234 min(), функция 72, 73 mixin class 393 Modula-2 332, 336 Modula-3 336 mpy(), функция 197, 198 multimap 260, 421 multiple inheritance 393 multiset 260, 421 mutable, ключевое слово 146, 391 mutator 150 my_string, класс 22, 23, 164, 232 N namespace 82 anonymous 83 scope 82 std 41, 360 NDEBUG, макро 93, 312 new 24, 95, 214, 372, 373 new.h 215, 374 null pointer constant 169 O object 18 Occam's razor 340, 391 oct, манипулятор 409 open(), функция 414 operator, ключевое слово 25, 41, 192, 197, 388 operator+(), функция 27 operator=(), функция 204 order(), функция 85, 91 orthogonality 340 ostream, класс 407, 408 ostream_iterator 268, 427 ostringstream 415 out_of_range, класс 325, 404 overflow_error, класс 325, 404 overload 193 overloading 25, 75, 383 P partition() 231, 254 Pascal 331, 332, 336 PL/1 332, 343
  • 13. place_min(), функция 93 placement 214, 374 platonism 338 pointer 437 poker, программа 116, 119, 140 polymorphism 191 pop, операция 110 postcondition 311 precondition 311 prepend(), функция 176 print(), функция 22, 25, 30, 171 printf(), функция 73 priority_queue, контейнерный адаптер 265, 425 privacy 81 private 21, 135 ключевое слово 132, 282, 391 protected 21 ключевое слово 282, 132, 391 public 21, 31 ключевое слово 132, 282, 391 pure virtual function 293 push, операция 110 push_front(), функция 238 put to 407 Q queue, контейнерный адаптер 265, 425 quicksort(), процедура 229, 254 R raise(), функция 312 rand(), функция 118, 141 range_error, класс 325, 404 rational, программа 194 reference 437 reference counting 179 register, ключевое слово 79, 363 reinterpret_cast 48, 98, 365 release(), функция 171 return 20, 71, 381 reverse(), функция 28, 176, 271 ring(), функция 70 RTTI 304, 394 run-time type identification 304, 394 runt ime_error, класс 325, 404 rvalue 148 S salary, программа 145, 390 scope 77, 138 scope resolution 133, 138 self-referential structure 169 set 260, 421 set_new_handler(), функция 374 shallow copy 161 shape, класс 33, 292 short-circuit evaluation 52 showhide, программа 213 signal, программа 314 signal(), функция 313 signal.h 312, 316 signature 76 signature matching algorithm 76 Simula 67 293, 332, 339 size_t, ran 86 size_type 437 sizeof 45, 53, 367 Slist 128, 169, 171 Smalltalk 21, 332, 344 SNOBOL 340 sort(), функция 30, 270 square, класс 34 sstream 415 stack класс 245 контейнерный адаптер 265, 425 statement 53 static 80, 81, 142, 144, 363, 390 static_cast 47, 61, 365 stddef.h 86, 268, 427 stderr 407 stdin 412 stdio.h 41, 73, 333, 407, 419 stdlib.h 161 stdout 407 stepwise refinement 69 STL 29, 259, 421 Stl_vect, программа 262 strcpy(), функция 95
  • 14. string 440 библиотека 20 string.h 94, 162, 333 strstream, класс 415 strstream.h 415 structure member 107 student, класс 31, 282 subscript 87 swap(), функция 231 switch 59, 60, 379, 380 T tabula rasa, методика 338 tag name 49, 108 template 27 ключевое слово 245, 396 terminate(), функция 321, 404 this, указатель 143, 144, 388 throw выражение 320 ключевое слово 34, 316 token 37, 353 top, операция 110 trivial conversion 217 try 34 type_info, класс 304, 394 type_info.h 304, 395 typedef, ключевое слово 108, 358, 361 type id, оператор 304, 394 typeinfo.h 304, 395 U unexpected(), функция 321, 404 union 113 unsigned int, Тип 86 using, ключевое слово 20, 82, 360 V value_type 437 vect, класс 166, 203 vector 260, 421 класс 228, 251 virtual 289, 292, 395 void 20, 70, 73, 86, 96 ключевое слово 86 тип 20 void* 86, 98, 234, 364 volatile, модификатор 217, 363 W wchar_t, Тип 362 while 56, 377 WYSIWYG 335 X xalloc, исключение 324, 374 A абстрактный базовый класс 33, 293, 394 класс 293 тип данных 18, 107, 131 автодекремент 368 автоинкремент 368 автоматический класс памяти 78 автоматическое преобразование типов 47 агрегат данных 107 агрегатный тип struct 107 адаптер для указателя на функцию 437 итератора 269, 427 контейнерный 265, 424 отрицающий 437 связывающий 275, 437 функции 275, 436 адаптерная схема 393 адаптирование структуры данных 188 алгоритм 269, 428 быстрой сортировки 429 выбора перегруженной функции 193, 384, 399 изменяющий 271, 432 копирования элементов 432 копирования элементов, обратный 433 накопления 434 неизменяющий 270, 431 обращения элементов 432 соответствия сигнатуре 76 сортировки 270, 428 сохраняющей сортировки 429 частичной сортировки 429
  • 15. численный 272, 434 аргумент по умолчанию 74, 383 шаблона 246, 250 арифметическое выражение 368 ассоциативный контейнер 260, 263, 421, 423 АТД 18, 107, 332 клиент АТД 131 поставщик АТД 131 Б базовый адрес 88 массива 86 базовый класс 30, 281 виртуальный 301 безымянное объединение 113 пространство имен 81, 83, 98 библиотека алгоритмов 269, 428 битовое поле 120 битовый оператор 53, 371 блок 55, 77, 78, 376 try 34, 316, 319, 402 быстрая сортировка 229 В Вассермана-Пирчера диаграмма 342 ввод-вывод 41, 407 поток 413 смешанный 419 вектор 260, 262, 421, 423 виртуальная функция 281, 289, 395 чисто виртуальная 293 виртуальный базовый класс 301 включать как часть, отношение 168 включение 336 вложенный класс 139, 405 внешний класс памяти 79 внешняя переменная 79 возбуждение исключения 312, 401 вставка 407 встраивание 76 встроенная функция 20, 383, 416 выбор перегруженной функции 193 выбор члена структуры 108 вывод форматированный 408 вызов деструктора 156, 161 конструктора 156 по значению 42, 70, 98 по ссылке 84, 85, 98, 383 функции 21, 69 вызывающее окружение 69 выражение 50 throw 320 арифметическое 368 исключения 319 присваивания 369 смешанное 46 вычисление по короткой схеме 52 Г глобальная переменная 79 глобальное имя 77 глубокая копия 161 Д двусторонняя очередь 260, 262, 421, 423 декремент 54 постфиксная форма 54 префиксная форма 54 дерево двоичного поиска 255, 287 деструктор 23, 24, 155, 161, 182, 386 вызов 156, 161 диаграмма Вассермана-Пирчера 342 диапазон значений с плавающей точкой 45 диапазон целых значений 45 динамический массив 121 директивы #define 76, 357 #include 20, 357 дисциплина программирования 331 доступ закрытый 135, 136, 137 к статическим членам данных 143 дружественная функция 195, 250, 387, 399 шаблонного класса 250
  • 16. дружественный итератор 232 дружественный класс 232 З заголовок функции 70 законченность 340 закрытость 81 закрытый член 135 замещение функции 283, 305 запуск исключения 317, 401 знаки пунктуации 41 И идентификатор 39, 354 cout 20 endl 20, 42 идентификация типа на этапе выполнения 304, 394 иерархичность 341 иерархия 30 иерархия типов 302 извлечение 412 изменчивость 146, 391 изменяющий алгоритм 271, 432 именующее выражение, lvalue 54, 90 имя глобальное 77 структуры 108 теговое 49, 108 индекс 87 индексирование 87 инициализатор 46 конструктора 157 инициализация 45, 82 массива 88 почленная 161 инкапсуляция 19, 21 инкремент 54 постфиксная форма 54 префиксная форма 54 инстанцирование типа 245 инструкция 53, 375 {} 55 break 58, 379 continue 59, 379 do 57, 378 for 56, 377 goto 60, 380 if 55, 377 if-else 55, 377 return 20, 71, 381 switch 58, 59, 60, 379, 380 while 56, 377 ввода 42 вывода 42 множественная 375 составная 55, 376 инструкция-выражение 376 инструкция-объявление 381 интерфейс контейнера STL 421 интерфейс типа 150 интерфейсное наследование 283 исключение 34, 311, 312, 316, 400 возбуждение 401 выражение 319 запуск 317, 401 обработчик 317, 403 перезапуск 318, 402 спецификация 321, 403 стандартное 324, 404 функция terminate() 321, 404 функция unexpected() 321, 404 итератор 228, 267, 422, 426 istream_iterator 268, 427 ostream_iterator 268, 427 ввода 267, 426 вывода 267, 426 двусторонний 267, 426 дружественный 232 произвольного доступа 267, 426 прохода вперед 267, 426 списка 236 К класс 21, 131, 341, 385 bad_alloc 325, 404 bad_cast 325, 404 bad_typeid 325, 404 clock 199 exception 325, 404 gen_tree 256, 298
  • 17. grad_student 31, 283 ios 414 istream 412 list 236 living 293 logic_error 325, 404 matrix 173, 196, 210 my_string 22, 23, 164, 179, 232 ostream 407, 408 out_of_range 325, 404 overflow_error 325, 404 polynomial 175 range_error 325, 404 runtime_error 325, 404 shape 33, 292 square 34 stack 245 strstream 415 student 31, 282 type_info 304, 394 vect 166, 196, 203 vector 228, 251 абстрактный 293 абстрактный базовый 33, 293, 394 базовый 30, 281 ввода 412 виртуальный базовый 301 вложенный 139, 405 вывода 407 двоичного дерева 286 деструктор 155, 386 дружественный 232 конструктор 155, 386 контейнерный 147, 227 наследование 281, 391 область видимости 138 памяти 78, 363 производный 281, 282 управляющий 179 функция-член 132 шаблон 250 классы памяти auto 78 extern 79 register 79 static 81 клиент АТД 19, 131 класса 333 типа 22 ключевое слово 38, 355 auto 78, 363 catch 34, 316 class 132, 136, 282, 391 const 144, 357, 363, 390 delete 95, 372 enum 49 explicit 23, 158, 183, 366 extern 79, 361, 363 friend 25, 195, 387 inline 20, 49, 76, 82, 134, 383 mutable 146, 391 new 95, 372 operator 25, 192, 197, 388 private 132, 135, 282, 391 protected 132, 282, 391 public 21, 31, 132, 282, 391 register 79, 363, return 71 static 80, 8.1, 142, 144, 363, 390 struct 108, 109 template 27, 245, 396 this 143, 388 throw 34, 316 try 316 typedef 108, 358, 361 union 113 using 20, 82, 360 virtual 289, 292, 395 void 20, 73, 86 volatile 363 доступа 21, 132 коды ASCII 349 комментарий 20, 38, 354 комплексные числа 115 компоновка 82, 360, 385 константа 355 перечислимого типа 49, 357
  • 18. символьная 40, 356 строковая 356 конструктор 23, 148, 155, 386, 394 вызов 156 инициализатор 157 инициализующий 156 как преобразование 158 копирующий 160, 386 копирующий по умолчанию 181 по умолчанию 157 контейнер 110, 147, 260, 421 ассоциативный 260, 263, 421, 423 последовательный 260, 262, 421, 423 контейнерный адаптер 265, 424 priority_queue 265, 425 queue 265, 425 stack 265, 425 контейнерный класс 27, 227 контроль постоянства 144 концепции ООП 19 копирующий конструктор 160, 164, 386 по умолчанию 181 копия глубокая 161 поверхностная 161 корректность программы 92 Л лезвие Оккамы, принцип 340, 391 лексема 37, 353 литерал 39 символьный 40 строковый 40, 94 логический оператор 52, 368 локальная область видимости 77 М макро 76, 416 assert 93, 311 define 247 NDEBUG 93, 312 манипулятор 20, 42, 408 dec 409 endl 408 flush 408 hex 409 oct 409 массив 83, 86, 88 базовый адрес 86, 88, 95 динамический 121, 167 динамический двумерный 173 индекс 87 индексирование 87 инициализация 88 многомерный 95 одномерный 166 передача функциям 89 превышение границ 88 матрица 121, 173 метка 60, 380 case 59, 379 default 59, 379 метод 21, 291 отложенный 293 пошагового уточнения 69 методология ООП 30, 282, 335 многомерный массив 95 многочлен 174, 206 разбросанный 174 сложение многочленов 175 множественное наследование 299, 302, 393 множество 260, 421, 423 модификатор 150, 159 const 82 volatile 217 мультимножество 260, 421, 423 мультиотображение 260, 421, 423 Н наследование 18, 30, 281, 297, 301, 334, 335, 391 интерфейсное 283 множественное 299, 302, 393 одиночное 302 порядок выполнения конструкторов 301 реализации 286 неизменяющий алгоритм 270, 431
  • 19. непрямое обращение 84 О область видимости 77, 81 глобальная 358 класса 138, 358 локальная 77 пространства имен 82, 358 прототипа функции 358 файла 77, 358 функции 358 обобщенное программирование 234 обобщенный указатель 86, 364 обозримость 81 обработка исключений 34, 316, 317 сигнала 313 обработчик 320, 403 установка 313 обратимость 340 объединение 113 безымянное 113 объект 18, 23, 155 объект-функция 273, 274, 435 объектно-ориентированное программирование 17, 18, 331, 337 концепции 19 преимущества 35 объектно-ориентированное проектирование 282, 335 методология 30 объявление 357, 358 переменной 45 ссылки 90 одиночное наследование 302 Оккамы принцип 340, 391 оператор 41, 351, 367 , (запятая) 54, 370 ! 369 & 53, 83, 371 () 53, 198, 208, 374 - 53, 84, 371 + + 54 - 54 -> 109, 198, 210 ->* 212, 394 . (выбора члена) 23, 108 .* 212, 394 : : 358 ; (точка с запятой) 54 << 207, 407, 408 - 198 >> 208, 407, 412 ?: 52 [] 53, 198, 374 delete 24, 95, 96, 215, 372 dynarpic_cast 304, 394 new 24, 95, 372 sizeof 45, 53, 367 switch 114 typeid 304, 394 автодекремента 368 автоинкремента 368 битовый 53, 371 вставка 407 выбора члена структуры 108 вызова функции 53, 208, 374 декремента 54 доступа к члену структуры 23 завершение инструкции 54 индекисрования 374 индексация массива 53 инкремента 54 логические 51, 52, 368 обращения по адресу 53, 371 определения адреса 53, 83, 371 отношения 368 отрицания 369 перегруженный 198 получить из 412 поместить в 407 порядок выполнения 367 приоритет выполнения 367 равенства 51, 368 разрешения области видимости 133, 134, 138, 358, 374 разыменования 53, 84 сравнения 51 указателя на член 374
  • 20. указателя структуры 109, 210 условные 52, 370 определение 357 функции 70 организация программы 43, 353 ориентированный ациклический граф (DAG) 299, 393 ортогональность 340 ответственность 341 отложенный метод 293 отмена постоянства 48, 146, 365, 391 отношение «включать как часть» 168 отображение 260, 421, 423 отрицающий адаптер 437 очередь 266, 425 двусторонняя 260, 421 П параметр вызываемый по значению 70 формальный 70 шаблона 397 шаблона класса 276 шаблона функции 276 параметризация 251, 254 параметрический полиморфизм 27, 245, 336 первым вошел, последним вышел (ПРО) 109 перебор 227 перегруженная функция 193 алгоритм выбора 250, 399 перегруженный оператор 198 перегрузка 25, 335 функции 75, 193, 383 перегрузка оператора 198, 388 () 208 -> 211 << 207 >> 208 delete 214 new 214 бинарного 201 индексирования 202 присваивания 202 указателя структуры 211 унарного 199 перезапуск исключения 318, 402 переменная внешняя 79 глобальная 79 объявление 45 сокрытие имени 77 перехватчик catch 402 перечисление 357 перечислимая константа 49, 357, 361 перечислимый тип 49 платонизм, философия проектирования 338, 346 поверхностная копия 161 поверхностное копирование 181 повторное использование кода 286, 334, 343 повышение типа 47, 193, 385 подавленное приведение 304 подсчет ссылок 179 подтип 284, 302, 336 поиск строк 442 полиморфизм 32, 191, 335, 336 параметрический 245, 336 чистый 281, 289 полиморфная функция 32 полином 174 получить из 412 поместить в 407 понижение типа 47 порядок выполнения конструкторов 301 последовательный контейнер 260, 262, 421, 423 поставщик АТД 131 постоянная нулевого указателя 169 постусловие 92, 311 поток ввода-вывода 413 состояние 417 почленная инициализация 161 пошаговое уточнение 69 превышение границ массива 88
  • 21. предусловие 92, 311 преобразование 364 преобразование типа 46, 47, 191, 284 автоматическое 47 АТД 192 неявное 192 от void* 98 тривиальное 217 явное 192 препроцессор 77 приведение 364, 365 подавленное 304 принудительное 335 приведение типов 47, 385 cast 47 const_cast 48 dynamic_cast 48 reinterpret__cast 48, 98 static_cast 47, 61 отмена постоянства 48 принудительное приведение 335 принцип черного ящика 333 принципы проектирования 340 приоритет и порядок выполнения операторов 367 приоритетная очередь 425 присваивание 53, 369, 376 пробный блок 316, 319, 401 проверка утверждения 92, 311 программа 19, 20, 42, 43, 353 корректность 92 элемент 37, 353 программирования дисциплина 331 программы 216 acc_mod.cpp 305 аdd3.срр 73 array.срр 397 array_2d.cpp 122 array_tm.cpp 251 avg_arr.cpp 75 bad_cast.cpp 324 basic_i.cpp 412 basic_o.cpp 408 bell.cpp 70 bellmult.cpp 71 c_pair.cpp 143 call_ref.cpp 84 catch.cpp 320, 403 ch_stacl.cpp 112 ch_stacl.h 110 ch_stac4.cpp 160, 161 ch_stac4.h 159, 161 ch_stac2.h 132 ch_stac3.cpp 136 ch_stac3.h 135 cir_main.cpp 80 circle3.cpp 80 clock.cpp 199, 201, 218 coerce.cpp 251 complexl.cpp 115 complex2.cpp 137 complexc.cpp 388 copy1.cpp 248 copy2.cpp 248 count.с 64 dbl_sp.cpp 414 def_args.cpp 74 dinner.cpp 21 do_test.cpp 58 dynarray.cpp 96 enum_tst.cpp 50 except.cpp 324 for_test.cpp 57, 58, 59 forloop.cpp 378 gcd.cpp 43 genstack.h 235 gentreel.cpp 256, 258 gentree2.cpp 288 gentree2.h 287 goto_tst.cpp 60 greater.cpp 92 hello.cpp 19 how_many.cpp 138 if_test.cpp 55 inline_t.cpp 76, 77 io.cpp 42 list2.h 236, 237, 238, 239, 240 m_to_k.cpp 48
  • 22. manip.cpp 409 matrix1.cpp 173 matrix2.cpp 196 matrix3.cpp 208 memcopy.cpp 234 min_dbl.cpp 72 min_int.cpp 72 mix_io.cpp 419 modulo.cpp 156 month.cpp 236 mutable.cpp 146 namespacicpp 83 nested .cpp 139 order.cpp 91, 93 over_new.cpp 215 pairvect.cpp 168 poker.cpp 116 poker1.cpp 107 poker2.cpp 140 poly1.cpp 174 poly2.cpp 206 pr_card.cpp 410 pr_card2.cpp 411 predator.cpp 293 printabl.cpp 158 quiksort.cpp 254 rational.cpp 193, 208 salary.cpp 145, 390 scope_t.cpp 77, 78 scope 1.cpp 359 set.cpp 121 shape 1.cpp 33 shape2.cpp 292 showhide.cpp 212 signal.cpp 313 slist.cpp 169, 170, 172 srl_list.cpp 29 stack_t1.cpp 246, 396 stack_t2.cpp 298 stack_t3.cpp 299 stackex.cpp 34 stat_tst.cpp 81 stcast.cpp 365 stl_adap.cpp 275 stl_age.cpp 264 stl_cont.cpp 259 stl_deq.cpp 260 stl_find.cpp 271 stl_func.cpp 274 stl_iadp.cpp 269 stl_io.cpp 268 stl_numr.cpp 273 stl_revr.cpp 271 stl_sort.cpp 270 stl_stak.cpp 266 stl_vect.cpp 262 str_func.cpp 94 str_strm.cpp 416 string 1.cpp 22 string2.cpp 23 string3.cpp 25 string4.cpp 26 string5.cpp 162, 165 string6.cpp 179 string7.cpp 192, 206 string8.cpp 234 string8.h 232, 233 stringt.cpp 438 studentl.cpp 30 student2.cpp 285 student2.h 282-285 sum_arrl.cpp 87 sum_arr2.cpp 89 sum_arr3.cpp 90 swap.cpp 249, 398 switch_t.cpp 59 throw_it.cpp 401 throw l.cpp 317 throw2.cpp 318 tracking.cpp 181 triple.cpp 211 tstack.cpp 27 twod.cpp 147 typeid.cpp 304 union.cpp 113 vect_bnd.cpp 392 vect_ex2.cpp 400 vect_it.cpp 253
  • 23. vect_it.h 251 vect_ovl.cpp 389 vect1.h 166 vect2.h 203 vect3.h 315, 385 vect4.cpp 322 vect4.h 316, 322 vectacum.cpp 229 vector.h 228, 229 vectsort.cpp 230 virt_err.cpp 291 virt_sel.cpp 290 weekend.cpp 113 while_t.cpp 56 word_cnt.cpp 418 проектирование 301, 340 штамп 343 производитель АТД 131 класса 333 производный класс 281, 282, 283 простой тип 37, 44 пространство имен 20, 41, 82, 359, 360 namespace std 360 безымянное 81, 83, 98 прототип функции 72, 382 список объявлений аргументов 73 псевдоним 90 пунктуация 41 Р разбросанный многочлен 174 размещение 214, 374 разрешение области видимости 133, 138 разыменование указателя 86, 371 раскрытие макро 76 распределитель памяти 437 расширение типа 47 расширяемость типов 21, 37 регистровый класс памяти 79 С сборка мусора 179, 344 свободная память 95, 372 связывающий адаптер 275, 437 сигнал 313 сигнатура функции 32, 76, 384 символ конца строки, 0 24 символьная константа 40, 356 символьный литерал 40 сложение многочленов 175 методом сортировки со слиянием 177 смесь 302 смешанное выражение 46 совместимость с языком С 404 типов 405 сокрытие данных 132, 136 имени переменной 77 сообщение 21, 291 сортировка, быстрая 229 составная инструкция 55, 376 состояние потока 417 сотрудничество 341 специализация шаблона 400 спецификация исключения 321, 403 списки 30, 47, 282, 320, 335, 364, 402 STL: адаптеры итераторов 427 адаптеры функций 275, 437 алгоритм выбора перегруженной функции 193, 250, 384, 399 виды объектов-функций 274, 435 вызов по ссылке с использованием указателей 85 интерфейсы типичных контейнеров STL 260, 421 использование копирующего конструктора 164, 386 использование функций в C++ 305 как работает инструкция switch 60, 380 категории библиотеки
  • 24. алгоритмов STL 269, 428 концепции ООП 19 некоторые функции из библиотеки cstring 94 операции над списком 169 организация программы на C++ 43, 353 порядок выполнения конструкторов 301, 394 преимущества использования производных классов 283 различия в типах по сравнению с ANSI С 405 типы полиморфизма 335 характеристики языка ООП 331 черный ящик в понимании клиента 334 черный ящик в понимании производителя 334 штампы проектирования в этой книге 343 элементы штампа проектирования 343 список 236, 260, 262, 421, 423 сравнение строк 441 ссылка объявление 90 подсчет 179 стандартная библиотека шаблонов 29, 259, 421 стандартное исключение 324, 404 стандартные файлы 413 стандартный выходной поток 407 статический класс памяти 81 член 250, 399 член данных 142 стек 79, 109, 110, 265, 425 LIFO 109 степень многочлена 174 Страуструп, Бьерн 17, 337 строгое соответствие 193 строка 439, 440 как поток 415 поиск строк 442 сравнение строк 441 строковая библиотека 438 константа 356 строковый литерал 40 тип 333 структура 21, 107 ch_stack 133, 136 listelem 237 slist 128 имя 108 оператор выбора члена 108 оператор указателя 109 программы 42 ссылающаяся на себя 169 член структуры 107 сужение типа 47 сущность-связь, модель 342 счетчик ссылок 179 Т таблицы 349, 368, 369, 371, 431, 432, 433, 434 STL: адаптеры функций 437 STL: арифметические объекты 436 STL: библиотечные функции, связанные с сортировкой 430 STL: библиотечные численные функции 435 STL: логические объекты 436 STL: сравнивающие объекты 436 STL: функции адаптированного стека 266, 425 STL: функции адаптированной очереди 266, 425 STL: функции приоритетной очереди 425 STL: функции-члены вставки и удаления 265, 424 STL: функции-члены распределителей
  • 25. памяти 437, 438 typedef 358 автоинкремент и автодекремент 368 арифметические выражения 368 ассоциативные конструкторы STL 264, 424 битовый оператор 53, 371 выражения sizeof 367 выражения присваивания 370 глобальные операторы, перегруженные в string 443 закрытые члены данных класса string 439 использование ключевого слова const 357 классы памяти 363 ключевые слова 38, 355 конструкторы класса string 439 манипуляторы ввода-вывода 409 объекты-функции STL 274 объявления 47 объявления и инициализации 220 объявления и присваивания 109 объявления массивов 95 оператор delete 373 оператор new 372 операторы контейнера STL 423 определения ассоциативных контейнеров STL 264, 423 определения контейнеров STL 261, 422 основные инструкции C++ 375 открытые функции-члены string 441 перечислимые константы 357 поисковые функции-члены string 442 преобразующая функция Bctype.h 417 приведения 366 пример строковой константы 356 примеры идентификаторов 354 примеры констант 355 примеры констант с плавающей точкой 356 приоритет и порядок выполнения операторов 367 символьные константы 40, 356 сложность языка 336 стандартные файлы 413 суммирование элементов массива 90 типы 363 тривиальные преобразования 217 файловые режимы 414 фундаментальные типы данных 44, 362 функции 381 функции и макро в ctype.h 416 функции состояния потока 417 функции-члены STL 424 характеристики функций 396 члены string, перегружающие операторы 440 члены контейнера STL 261, 422 члены последовательных контейнеров STL 263, 423 теговое имя 49, 108 тип bool 362, 368 char* 94 FILE 333 size_t 86 string 440 struct 107 unsigned int 86 void 20, 70 wchar_t 362 автоматическое преобразование 47 возвращаемый функцией 70 идентификация на этапе
  • 26. выполнения 304, 394 инстанцирование 245 интерфейс 150 перечислимый 49 повышение 47, 193, 385 понижение 47 преобразование 46, 47, 191 преобразование АТД 192 приведение 47 простой 37, 44 расширение 47 расширяемость 21, 37 строковый 333, 438 сужение 47 файловый 333 фундаментальный 44, 362 тривиальное преобразование типа 217 тройной условный оператор 52 У указатель 83, 88, 371 this 143, 144, 388, 405 на член класса 212, 394 обобщенный 86, 364 разыменование 84 управляющий класс 179 условный оператор ? : 52, 370 установка обработчика 313 утверждение 92, 311 постусловие 92, 311 предусловие 92, 311 Ф файл, область видимости 77 файловый тип 333 формальный параметр 70 форматированный вывод 408 фундаментальный тип 44, 362 функции accumulate() 30, 259, 272 allocate() 122 area() 33 assign() 22, 117 avg_arr() 75 begin() 30 ch_stack() 111 close() 414 comp() 256 copy() 271 element_lval() 148 element_rval() 148 end() 30 find() 271 find_max() 122, 148 free() 214 gcd() 43, 101 greater (} 92, 193 init() 29 inner_product() 272 insert() 256, 287 length() 22 main() 20, 69 memcpy ( ) 86, 161, 234 min() 72, 73 mpy() 197, 198 open() 414 operator+() 27 operator=() 204 order() 85, 91 partition() 231, 254 place_min() 93 pr_message() 20 prepend() 176 print() 22, 25, 30, 171 printf() 73 push_front (} 238 quicksort() 254 raise() 312 rand() 118, 141 release() 171 reverse() 28, 176, 271 ring() 70 set_new_handler() 374 signal() 313 sort() 30, 270 strcpy() 95 swap() 231 terminate() 321, 404 unexpected() 321, 404
  • 27. функция 69, 305, 381 аргумент по уполчанию 74 виртуальная 281, 289, 395 возвращаемый тип 70 встроенная 20, 383 вызов 21, 69 вызов по значению 70 вызов по ссылке 383 вызывающее окружение 69 доступа 150, 159 дружественная 195, 387, 399 дружественная, шаблонного класса 250 заголовок 70 замещение '283, 305 определение 70 перегруженная 193 перегруженная, алгоритм выбора 250, 399 перегрузка 75, 383 передача массива функции 89 полиморфная 32 преобразования типа 192 прототип 72, 382 с пустым списком параметров 73 сигнатура 32, 76, 384 чисто виртуальная 293 функция-модификатор 150, 159 функция-член 21, 132, 133, 134, 387 неявно встраиваемая 133 типа const 144 типа static 144 Ч черный ящик 333, 334 численный алгоритм 272, 434 чисто виртуальная функция 293 чистый полиморфизм 281, 289 член закрытый 135 объединения 113 структуры 107 член данных статический 142 Ш шаблон 27, 297, 396 аргумент 246, 250 класса 250 параметр 397 специализация 400 функции 398 ширина битового поля 120 штамп проектирования 343 Э элемент программы 37 Я ядро языка 37