_ _abstract
Ключевое слово _ _abstract используется в сочетании со словом _ _gc при определении абстрактного управляемого класса. Объект _ _abstract-класса создать нельзя. Для класса, определенного с использованием ключевого слова _ _abstract, необязательно включение в него чисто виртуальной функции.
_ _box
Ключевое слов _ _box заключает в специальную оболочку значение внутри объекта. Такая "упаковка" позволяет использовать тип этого значения в коде, который требует, чтобы данный объект был выведен из класса System::Object, базового класса для всех .NET-объектов.
_ _delegate
Ключевое слово _ _delegate определяет объект-делегат, который инкапсулирует указатель на функцию внутри управляемого класса (т.е. класса, модифицированного ключевым словом _ _gc).
_ _event
Ключевое слово _ _event определяет функцию, которая представляет некоторое событие. Для такой функции задается только прототип.
_ _finally
Ключевое слово _ _finally — это дополнение к стандартному С++-механизму обработки исключительных ситуаций. Оно используется для определения блока кода, который должен выполняться после выхода из блоков try/catch. При этом не имеет значения, какие условия приводят к завершению try/catch-блока. Блок _ _finally должен быть выполнен в любом случае.
_ _gc
Ключевое слово _ _gc определяет управляемый класс. Обозначение "gc" представляет собой сокращение от словосочетания "garbage collection" (т.е. "сборка мусора") и означает, что объекты этого класса автоматически подвергаются процессу утилизации памяти, освобождаемой во время работы программы, когда они больше не нужны. В объекте отпадает необходимость в случае, когда на него не существует ни одной ссылки. Объекты _ _gc-класса должны создаваться с помощью оператора new. Массивы, указатели и интерфейсы также можно определять с использованием ключевого слова _ _gc.
_ _identifier
Ключевое слово _ _identifier позволяет любому другому ключевому слову языка C++ использоваться в качестве идентификатора. Эта возможность не предназначена для широкого применения и введена для решения специальных задач.
_ _interface
Ключевое слово _ _interface определяет класс, который должен действовать как интерфейс. В любом интерфейсе ни одна из функций не должна включать тело, т.е. все функции интерфейса являются неявно заданными чисто виртуальными функциями. Таким образом, интерфейс представляет собой абстрактный класс, в котором не реализована ни одна из его функций.
_ _nogc
Ключевое слово _ _nogc определяет неуправляемый класс. Поскольку такой (неуправляемый) тип класса создается по умолчанию, ключевое слово _ _nogc используется редко.
_ _pin
Ключевое слово _ _pin используется для определения указателя, который фиксирует местоположение в памяти объекта, на который он указывает. Таким образом, "закрепленный" объект не будет перемещаться в памяти в процессе сборки мусора. Как следствие, сборщик мусора не в состоянии сделать недействительным указатель, модифицированный с помощью ключевого слова _ _pin.
_ _property
Ключевое слово _ _property определяет свойство, являющееся функцией-членом, которая позволяет установить или получить значение некоторой переменной (члена данных класса). Свойства предоставляют удобное средство управления доступом к закрытым (private) или защищенным (protected) данным.
_ _sealed
Ключевое слово _ _sealed предохраняет модифицируемый им класс от наследования другими классами. Это ключевое слово можно также использовать для информирования о том, что виртуальная функция не может быть переопределена.
_ _try_cast
С помощью ключевого слова _ _try_cast можно попытаться преобразовать тип выражения. Если предпринятая попытка окажется неудачной, будет сгенерировано исключение типа System::InvalidCastException.
_ _typeof
Ключевое слово _ _typeof позволяет получить объект, который инкапсулирует информацию о данном типе. Этот объект представляет собой экземпляр класса System::Туре.
_ _value
Ключевое слово _ _value определяет класс, который представляет собой обозначение типа. Любое обозначение типа содержит собственные значения. И этим тип _ _value отличается от типа _ _gc, который должен выделять память для объекта с помощью оператора new. Обозначения типа, не представляют интерес для "сборщика мусора".
Расширения препроцессора
Для поддержки .NET-среды компания Microsoft определяет директиву препроцессора #using, которая используется для импортирования метаданных в программу. Метаданные содержат информацию о типе и членах класса в форме, которая не зависит от конкретного языка программирования. Таким образом, метаданные обеспечивают поддержку смешанного использования языков программирования. Все управляемые С++-программы должны импортировать библиотеку <mscorlib.dll>, которая содержит необходимые метаданные для оболочки .NET Framework.
Компания Microsoft определяет две pragma-инструкции (используемые с директивой препроцессора #pragma), которые имеют отношение к оболочке .NET Framework. Первая (managed) определяет управляемый код. Вторая (unmanaged) определяет неуправляемый (собственный, т.е. присущий данной среде) код. Эти инструкции могут быть использованы внутри программы для селективного создания управляемого и неуправляемого кода.
Атрибут attribute
Компания Microsoft определяет атрибут attribute, который используется для объявления другого атрибута.
Компиляция управляемых С++-программ
На момент написания этой книги единственный доступный компилятор, который мог обрабатывать программы, ориентированные на работу в среде .NET Framework, поставлялся компанией Microsoft (Visual Studio .NET). Чтобы скомпилировать управляемую программу, необходимо использовать команду /сlr, которая передаст вашу программу "в руки" универсального средства Common Language Runtime.
Предметный указатель
-Символы-
#define, директива, 570
#elif, директива, 576
#endif, директива, 575
#error, директива, 574
#if, директива, 575
#ifdef, директива, 577
#ifndef, директива, 577
#include, директива, 574; 602
#pragma, директива, 580
#undef, директива, 578
#using, 609
. NET Framework, 606
_ _abstract, 606
_ _box, 607
_ _cplusplus, макрос, 582
_ _DATE_ _, макрос, 582
_ _delegate, 607
_ _event, 607
_ _FILE_ _, макрос, 580; 582
_ _finally, 607
_ _gc, 607
_ _identifier, 607
_ _interface, 608
_ _LINE_ _, макрос, 580; 582
_ _nogc, 608
_ _pin, 608
_ _property, 608
_ _sealed, 608
_ _STDC_ _, макрос, 582
_ _TIME_ _, макрос, 582
_ _try_cast, 608
_ _typeof, 609
_ _value, 609
-A-
abort(), 417,419
abs(), 167; 191
Allocator, 524
American National Standards Institute, 18
ANSI, 18
asm, 514
assign(), 563
atof(), 164
attribute, 609
auto, спецификатор, 149; 206
-B-
bad(), 471
bad_cast, исключение, 484
BASIC, 24
basic ios, класс, 440
basic_iostream, класс, 440
basic_istream, класс, 440
basic ostream, класс, 440
basic_streambuf, класс, 440
BCPL, 23
before(), 475
begin(), 529
Binding
early, 393
late, 393
bool, 56
boolalpha, флаг, 448
break, 95
-C-
C#, 29
C++ Builder, 27; 33
C89, 23
C99, 23
Call-by-reference, 178
Call-by-value, 178
Cast, 75
catch, 416
cerr, 440
char, 56; 61
cin, 440
class, 266
clear(), 471
clock(), 213
clog, 440
close(), 458
CLR, 606
Common Language Runtime, 606; 609
compare(), 566
const, спецификатор типа, 202; 508
const_cast, оператор, 488
continue, 94
count(), алгоритм, 554
count_if(), алгоритм, 554
cout, 440
-D-
Daylight Saving Time, 251
dec, флаг, 448
delete, 230
double, 40; 56
do-while, 93
dynamic_cast, оператор, 483
-E-
Early binding, 393
end(), 529
enum, 214
eof(), 463
erase(), 529
exit(), 418; 419
EXIT_FAILURE, константа, 419
EXIT_SUCCESS, константа, 419
explicit, 510
extern, 206; 516
-F-
fabs(), 191
fail(), 471
false, константа, 57
fclose(), 595
feof(), 595
ferror(), 597
fgetc(), 595
fill(), 451
find(), 565
fixed, флаг, 448
flags(), 449
Flat model, 141
float, 56
flush(), 467
fmtflags, перечисление, 447
fopen(), 593
for, цикл, 49; 82
FORTRAN, 24
fprintf(), 600
fputc(), 594
fread(), 597
free(), 233
friend, 294
fscanf(), 600
fseek(), 599
Function overloading, 190
fwrite(), 597
-G-
gcount(), 463
Generated function, 398
get(), 460; 465
Getline(), 466
gets(), 107
good(), 471
goto, 97
GUI, 18; 34
-H-
Heap, 229
hex, флаг, 448
-I-
IDE (Integrated Development Environment), 33
if, 48; 78
if-else-if, 81
Inline function, 283
inline, модификатор, 284; 574
insert(), 529; 537
Instantiating, 398
int, 38; 56; 61
Integral promotion, 74
Integrated Development Environment, 33
internal, флаг, 448
International Standards Organization, 18
ios, класс, 447
ios_base, класс, 440
iostate, перечисление, 470
isalpha(), 114
ISO, 18
-J-
Java, 29
-K-
Kbhit(), 139
-L-
labs(), 191
Late binding, 393
left, флаг, 448
list, класс, 536
long double, 61; 62
long int, 61; 62
long, модификатор, 60
-M-
main(), 162
make_pair(), 546
malloc(), 233
managed, 609
Manipulator, 447
map, класс, 545
merge(), 537
MFC, 387
Microsoft Foundation Classes, 387
Microsoft Intermediate Language, 606
Modula-2, 23; 41
MSIL, 606
Multiple indirection, 141
mutable, 509
-N-
name(), 475
namespace, 494
Namespace, 35
new, оператор, 230; 430
nothrow, 431
npos, 561
NULL, 594
-O-
Object Oriented Programming, 264
oct, флаг, 448
OOP, 264
open(), 456
openmode, перечисление, 457
operator, 320
Operator, 68
overload, 193
-P-
pair, класс, 546
Pascal, 23; 41
peek(), 467
Plain Old Data, 281
POD-struct, 281
Pointer-to-member, 517
precision(), 451
Predicate, 524
Preprocessor, 570
printf(), 585
private, 281; 355
protected, 357
public, 267; 355
push_back(), 529; 537
put(), 460
putback(), 467
-Q-
qsort(), 503
Quicksort, алгоритм, 503
-R-
rand(), 138; 478
rdstate(), 470
read(), 461
Reference parameter, 181
register, спецификатор, 211
reinterpret_cast, оператор, 490
remove(), 600
return, инструкция, 166
rewind(), 597
rfind(), 565
right, флаг, 448
RTTI, 474
-S-
scanf(), 588
Scanset, 590
scientific, флаг, 448
seekg(), 468; 470
seekp(), 468; 470
setf(), 448
short int, 61
short, модификатор, 60
showbase, флаг, 448
showflags(), 450
showpoint, флаг, 448
showpos, флаг, 448
signed char, 61
signed int, 61
signed long int, 61; 62
signed short int, 61
signed, модификатор, 60
Simula67, 26
sizeof, 227; 263
skipws, флаг, 448
splice(), 537
Standard C++, 27
Standard Template Library, 26; 54; 522
static, модификатор, 208; 210; 506
static_cast, оператор, 489
std, пространство имен, 35; 438
stderr, поток, 585
stdin, поток, 585
stdout, поток, 585
STL, 26; 54; 522
strcat(), 109
strcmp(), 110
strcpy(), 109; 171
Stream, 439
streamsize, тип, 451
string, класс, 559
strlen(), 111; 161
struct, 238
switch, 87
-T-
tellg(), 470
tellp(), 470
template, 396; 405
template<>, 401; 413
terminate(), 417
this,317; 508
throw, 416
throw-выражение, 427
time_t, тип даты, 251
tm, структура, 251
tolower(), 113
toupper(), 135
true, константа, 57
try, 416
Type promotion, 74
type_info, класс, 474
typeid, 474
typename, 396
-U-
unexpected(), 427
Union, 258
unitbuf, флаг, 448
unmanaged, 609
unsetf(), 448; 449
unsigned char, 61
unsigned int, 61
unsigned long int, 61; 62
unsigned short int, 61
unsigned, модификатор, 60
uppercase, флаг, 448
using, 35; 497
virtual, 375; 381
Visual Basic, 23
Visual C++, 27; 33
void, 43; 47; 56
void-функции, 169
volatile, спецификатор типа, 204
-W-
wcerr, 440
wchar_t, 56
wcin, 440
wclog, 440
wcout, 440
while, 91
width(), 451; 452
write(), 461
-А-
Абстрактный класс, 393
Алгоритм
adjacent_find(), 551
binary_search(), 551
copy(), 551
copy_backward(), 551
count(), 551
count_if(), 551
equal(), 551
equal_range(), 551
fill(), 551
fill_n(), 551
find(), 551; 552
find_end(), 551
find_first_of(), 552
for_each(), 552
generate(), 552
generate_n(), 552
includes(), 552
inplace_merge(), 552
iter_swap(), 552
lexicographical_compare(), 552
lower_bound(), 552
make_heap(), 552
max(), 552
max_element(), 552
merge(), 552
min(), 552
min_element(), 552
mismatch(), 552
next_permutation(), 552
nth_element(), 552
partial_sort(), 552
partial_sort_copy(), 552
partition(), 552
pop_heap(), 553
prev_permutation(), 553
push_heap(), 553
Quicksort, 105
random_shuffle(), 553
remove(), 553
remove_copy(), 553; 555
remove_copy_if(), 553
remove_if(), 553
replace(), 553
replace_copy(), 553; 555
replace_copy_if(), 553
replace_if(), 553
reverse(), 553; 557
rotate(), 553
search(), 553
search_n(), 553
set_difference(), 553
set_intersection(), 553
set_symmetric_difference(), 553
set_union(), 553
sort(), 553
sort_heap(), 553
stable_partition(), 553
stable_sort(), 553
swap(), 553
swap_ranges(), 553
transform(), 553; 557
unique(), 553
upper_bond(), 553
Алгоритмы, 523; 551
командной строки, 162
по умолчанию, 193
функции main(),45; 162
Ассемблер, 23; 514
Атрибут
attribute, 609
-Б-
Библиотека
<mscorlib.dll>, 609
STL, 522
Битовое множество, 525
Битовые поля, 256
Блок кода, 24; 51; 148
-В-
Вектор, 527
Виртуальное наследование, 375
Виртуальные функции, 381
Выражение, 73
условное, 79
-Г-
Глобальные переменные, 59
-Д-
Дек, 525
Декремент, 69
Деструктор, 273
Динамическая идентификация типов, 474
Динамическая инициализация, 300
Динамический массив, 526
Директива препроцессора, 570
#define, 570
#elif, 576
#endif, 575
#error, 574
#if, 575
#ifdef, 577
#ifhdef, 577
#include, 574; 602
#line, 580
#pragma, 580
#undef, 578
#using, 609
Дополнительный код, 62
-З-
Заголовки, 172
Заголовок
<algorithm>, 551
<bitset>, 525
<cctype>, 113
<cstdio>, 584
<cstdlib>, 44; 419; 504
<cstring>, 109
<ctime>, 213; 251; 298
<deque>, 525
<fstream>, 456
<functional>, 525
<iomanip>, 453
<iostream>, 35; 438; 440; 466
<list>, 525
<map>, 525
<new>, 430; 436
<queue>, 526
<set>, 526
<stack>, 526
<string>, 559
<typeinfo>, 474
<utility>, 525
<vector>, 526
stdio.h, 588
Заголовочный файл
<iostream.h>, 438
stdio.h, 584
-И-
Идентификатор, 53
Индекс, 102
Инициализация
динамическая, 300
массивов, 115
переменных, 66
Инкапсуляция, 27
Инкремент, 69
Инструкция
continue, 94
do-while, 93
for, 49
goto, 97
if, 48; 78
return, 45; 166
switch, 87
while, 91
Исключение, 230; 416
bad_alloc, 430
bad_cast, 484
bad_typeid, 477
System::InvalidCastException, 608
Исключительная ситуация, 416
Итераторы, 523
входные, 523
выходные, 523
двунаправленные, 523
однонаправленные, 523
произвольного доступа, 523
реверсивные, 524
-К-
Класс, 266
allocator, 524
basic_ios, 440
basic_iostream, 440
basic_istream, 440
basic_ostream, 440
basic_streambuf, 440
fstream, 456
ifstream, 456
ios, 447; 457
ios_base, 440
list, 536
map, 545
ofstream, 456
pair, 546
string, 559
type_info, 474
vector, 527
абстрактный, 393
базовый, 352
полиморфный, 381; 475
производный, 352
шаблонный
pair, 525
Классы
контейнерные, 525
bitset, 525
deque, 525
list, 525
map, 525
multimap, 526
multiset, 526
priority_queue, 526
queue, 526
set, 526
stack, 526
vector, 526
обобщенные, 404
Ключевые слова C++, 53
Комментарий, 34
Компилятор
C++ Builder, 33
Visual C++, 33
Константа, 63
CLOCKS_PER_SEC, 298
EXIT_FAILURE, 419
EXIT_SUCCESS, 419
npos, 561
Конструктор, 272; 511
копии, 305; 311
параметризованный, 275
Контейнерные классы, 525
Контейнеры, 523
ассоциативные, 523; 545
векторы, 526
последовательные, 523
Куча, 229; 552; 553
Кэш, 212
-Л-
Лексема, 132
Линейный список, 525
Литерал, 63
восьмеричный, 64
строковый, 65; 106
шестнадцатеричный, 64
Локальные переменные, 57
-М-
Макроимя, 570; 582
Макроподстановка, 570
Макрос
_ _cplusplus, 582
_ _DATE_ _, 582
_ _FILE_ _, 582
_ _LINE_ _, 582
_ _STDC_ _, 582
_ _TIME_ _, 582
SEEK_CUR, 599
SEEK_END, 599
SEEK_SET, 599
Манипулятор, 452
boolalpha, 452
dec, 452
endl, 452
ends, 452
fixed, 452
flush, 452
hex, 452
internal, 452
left, 452
noboolalpha, 452
noshowbase, 452
noshowpoint, 452
noshowpos, 452
noskipws, 452
nounitbuf, 453
nouppercase, 453
oct, 453
resetiosflags(), 453
right, 453
scientific, 453
setbase(), 453
setfill(), 453
setiosflags(), 453; 454
setprecision(), 453
setw(), 453
showbase, 453
showpoint, 453
showpos, 453
skipws, 453
unitbuf, 453
uppercase, 453
ws, 453; 454
Манипуляторные функции, 454
Массив, 102; 131
двумерный, 114
инициализация, 115
многомерный, 115
одномерный, 102
объектов, 286
строк, 119
указателей, 137
Метаданные, 609
Метка, 98