Использование функций fopen(), fgetc(), fputc() и fclose()
Функции fopen() , fgetc() , fputc() и fclose() составляют минимальный набор операций с файлами. Их использование демонстрируется в следующей программе, которая выполняет копирование файла. Обратите внимание на то, что файлы открываются в двоичном режиме и что для проверки достижения конца файла используется функция feof() .
Функции ferror() и rewind()
Функция ferror() используется для определения факта возникновения ошибки при выполнении операции с файлом. Ее прототип имеет такой вид.
Здесь параметр fp – действительный файловый указатель. Функция ferror() возвращает значение true , если при выполнении последней файловой операции произошла ошибка; в противном случае – значение false . Поскольку возникновение ошибки возможно при выполнении любой операции с файлом, функцию ferror() необходимо вызывать сразу после каждой функции обработки файлов; в противном случае информацию об ошибке можно попросту потерять.
Функция rewind( ) перемещает индикатор позиции файла в начало файла, заданного в качестве аргумента. Ее прототип выглядит так.
Здесь параметр fp – действительный файловый указатель.
Функции fread() и fwrite()
В файловой системе языка С предусмотрено две функции, fread() и fwrite() , которые позволяют считывать и записывать блоки данных. Эти функции подобны С++‑функциям read() и write() . Их прототипы имеют следующий вид.
При вызове функции fread() параметр buffer представляет собой указатель на область памяти, которая предназначена для приема данных, считываемых из файла. Функция считывает count объектов длиной num_bytes из потока, адресуемого файловым указателем fp . Функция fread() возвращает количество считанных объектов, которое может оказаться меньше заданного значения count , если при выполнении этой операции возникла ошибка или был достигнут конец файла.
|
|
При вызове функции fwrite() параметр buffer представляет собой указатель на информацию, которая подлежит записи в файл. Эта функция записывает count объектов длиной num_bytes в поток, адресуемый файловым указателем fp . Функция fwrite() возвращает количество записанных объектов, которое будет равно значению count , если при выполнении этой операции не было ошибки.
Если при вызове функций fread() и fwrite() файл был открыт для выполнения двоичной операции, то они могут считывать или записывать данные любого типа. Например, следующая программа записывает в дисковый файл значение типа float .
Как показано в этой программе, роль буфера может выполнять (и при том довольно часто) одна переменная.
С помощью функций fread() и fwrite() часто выполняется считывание и запись содержимого массивов или структур. Например, следующая программа, используя одну только функцию fwrite() , записывает содержимое массива значений с плавающей точкой balance в файл с именем balance . Затем с помощью одной лишь функции fread() программа считывает элементы этого массива и отображает их на экране.
|
|
Использовать функции fread() и fwrite() для считывания и записи блоков данных более эффективно, чем многократно вызывать функции fgetc() и fputc() .
Функция fseek() и выполнение ввода‑вывода с произвольным доступом
С‑система ввода‑вывода позволяет выполнять операции считывания и записи данных с произвольным доступом. Для этого служит функция fseek() , которая устанавливает нужным образом индикатор позиции файла. Ее прототип таков.
Здесь параметр fp – файловый указатель, возвращаемый функцией fopen() , параметр numbytes – количество байтов относительно исходного положения, заданного параметром origin . Параметр origin может принимать одно из следующих макроимен (определенных в заголовке stdio.h ).
Следовательно, чтобы переместить индикатор позиции в файле на numbytes байтов относительно его начала, в качестве параметра origin необходимо использовать значение SEEK_SET . Для перемещения относительно текущей позиции используйте значение SEEK_CUR , а для смещения с конца файла – значение SEEK_END .
|
|
Нулевое значение результата функции свидетельствует об успешном выполнении функции fseek() , а ненулевое– о возникновении сбоя. Как правило, функцию fseek() не рекомендуется использовать для файлов, открытых в текстовом режиме, поскольку преобразование символов может привести к ошибочным перемещениям индикатора позиции в файле. Поэтому лучше использовать эту функцию для файлов, открытых в двоичном режиме. Например, если вам нужно считать 234‑й байт в файле test , выполните следующий код.
Функции fprintf() и fscanf()
Помимо рассмотренных выше основных функций ввода‑вывода, С‑система ввода‑вывода включает функции fprintf() и fscanf() . Поведение этих функций аналогично поведению функций printf() и scanf() , за исключением того, что они работают с файлами. Именно поэтому эти функции обычно используются в С‑программах. Прототипы функций fprintf() и fscanf() выглядят так.
Здесь параметр fp – файловый указатель, возвращаемый функцией fopen() . Функции fprintf() и fscanf() работают подобно функциям printf() и scanf() соответственно, за исключением того, что их действие направлено на файл, определенный параметром fp .
|
|
Удаление файлов
Функция remove() удаляет заданный файл. Ее прототип выглядит так.
Она возвращает нуль при успешном удалении файла и ненулевое значение в противном случае.
Приложение Б: Использование устаревшего С++‑компилятора
Программы, приведенные в этой книге, полностью соответствуют стандарту ANSI/ISO для C++ и могут быть скомпилированы практически любым современным С++‑компилятором, включая Visual C++ (Microsoft) и C++ Builder (Borland). Следовательно, при использовании современного компилятора у вас не должно быть проблем с компиляцией программ из этой книги. (В этом случае вам вообще не понадобится информация, представленная в этом приложении.)
Но если вы используете компилятор, созданный несколько лет назад, то при попытке скомпилировать наши примеры он может выдать целый список ошибок, не распознав ряд новых С++‑средств. И в этом случае не стоит волноваться. Для того чтобы эти программы заработали со старыми компиляторами, нужно внести в них небольшие изменения. Чаще всего старые и новые С++‑программы отличаются использованием двух средств: заголовков и пространств имен. Вот об этом и пойдет речь в этом приложении.
Как упоминалось в главе 2, инструкция #include включает в программу заданный заголовок. Для более ранних версий C++ под заголовками понимались файлы с расширением .h . Например, в старой С++‑программе для включения заголовка iostream была бы использована следующая инструкция.
В этом случае в программу был бы включен заголовочный файл iostream.h . Таким образом, включая в старую С++‑программу заголовок, необходимо задавать имя файла с расширением .h .
В новых С++‑программах в соответствии со стандартом ANSI/ISO для C++ используются заголовки другого типа. Современные заголовки определяют не имена файлов, а стандартные идентификаторы, которые могут совпадать с таковыми, но не всегда. Современные С++‑заголовки представляют собой абстракцию, которая попросту гарантирует включение в программу требуемой информации.
Поскольку современные заголовки необязательно являются именами файлов, они не должны иметь расширение .h . Они определяют имя заголовка, заключенного в угловые скобки. Вот, например, как выглядят два современных заголовка, подлерживаемых стандартом C++.
Чтобы преобразовать эти "новые" заголовки в "старые" заголовочные файлы, достаточно добавить расширение .h .
Включая современный заголовок в программу, необходимо помнить, что его содержимое относится к пространству имен std . Как упоминалось выше, пространство имен – это просто декларативная область. Ее назначение – локализовать имена идентификаторов во избежание коллизий с именами. Старые версии C++ помещают имена библиотечных функций в глобальное пространство имен, а не в пространство имен std , используемое современными компиляторами. Таким образом, работая со старым компилятором, не нужно использовать эту инструкцию:
В действительности большинство старых компиляторов вообще не воспримут инструкцию using namespace .
Два простых изменения
Если ваш компилятор не поддерживает пространства имен и новые заголовки, он выдаст одно или несколько сообщений об ошибках при попытке скомпилировать первые несколько строк программ, приведенных в этой книге. В этом случае в эти программы необходимо внести только два простых изменения: использовать заголовок старого типа и удалить namespace ‑инструкцию. Например, замените эти инструкции
такой.
Это изменение преобразует "новую" программу в "старую" . Поскольку при использовании "старого" заголовка в глобальное пространство имен считывается все содержимое заголовочного файла, необходимость в использовании namespaee ‑инструкции отпадает. После внесения этих изменений, программу можно скомпилировать с помощью старого компилятора.
Иногда приходится вносить и другие изменения. C++ наследует ряд заголовков из языка С. Язык С не поддерживает современный стиль использования С++‑заголовков, используя вместо них заголовочные .h ‑файлы. Для разрешения обратной совместимости стандарт C++ по‑прежнему поддерживает заголовочные С‑файлы. Однако стандарт C++ также определяет современные заголовки, которые можно использовать вместо заголовочных С‑файлов. В С++‑версиях стандартных С‑заголовков к имени С‑файла просто добавляется префикс 'c' и опускается расширение .h . Например, С++‑заголовком для файла math.h служит заголовок <cmath> , а для файла string.h – заголовок <cstring> . Несмотря на то что в С++‑программу разрешено включать заголовочный С‑файл, против такого подхода у разработчиков стандарта есть существенные возражения (другими словами, это не рекомендовано). Поэтому в настоящей книге используются современные С++‑заголовки во всех инструкциях #include. Если ваш компилятор не поддерживает С++‑заголовки для С‑заголовков, просто замените "старые" заголовочные файлы.
Приложение В: *.NET‑расширения для C++
Разработанная компанией Microsoft интегрированная оболочка .NET Framework определяет среду, которая предназначена для поддержки разработки и выполнения сильно распределенных приложений, основанных на использовании компонентных объектов. Она позволяет "мирно сосуществовать" различным языкам программирования и обеспечивает безопасность, переносимость программ и общую модель программирования для платформы Windows. Несмотря на относительную новизну оболочки .NET Framework, по всей вероятности, в ближайшем будущем в этой среде будут работать многие С++‑программисты.
Интегрированная оболочка .NET Framework предоставляет управляемую среду, которая следит за выполнением программы. Программа, предназначенная для помещения в оболочку .NET Framework , не компилируется с целью получения объектного кода. Вместо этого она переводится на промежуточный язык MSIL (Microsoft Intermediate Language), а затем выполняется под управлением универсального средства CLR (Common Language Runtime). Управляемое выполнение– это механизм, который поддерживает ключевые преимущества, предлагаемые оболочкой .NET Framework .
Чтобы воспользоваться преимуществами управляемого выполнения, необходимо применять для С++‑программ специальный набор нестандартных ключевых слов и директив препроцессора, которые были определены разработчиками компании Microsoft. Важно понимать, что этот дополнительный набор не включен в стандарт C++ (ANSI/ISO Standard C++). Поэтому код, в котором используются эти ключевые слова, нельзя переносить в другие среды выполнения.
Описание оболочки .NET Framework и методов С++‑программирования, необходимых для ее использования, выходит за рамки этой книги. Однако здесь приводится краткий обзор .NET ‑расширения языка C++ ради тех программистов, которые работают в .NET ‑среде.
Ключевые слова .NET‑среды
Для поддержки .NET ‑среды управляемого выполнения С++‑программ Microsoft вводит в язык C++ следующие ключевые слова.
Краткое описание каждого из этих ключевых слов приведено в следующих разделах.
_ _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
Многоуровневая непрямая адресация, 141
Множество, 526
битовое, 525
Модели памяти, 140
Модификатор
const, 488; 508
inline, 284
long, 60
mutable, 509
short, 60
signed, 60
static, 208; 210
unsigned, 60
volatile, 488
максимальной длины поля, 590
точности, 587
Модификаторы типов, 60
Мультиотображение, 526
‑Н‑
Набор сканируемых символов, 590
Наследование, 29; 351
виртуальное, 375
‑О‑
Обобщенные
классы, 404
функции, 396
Объединения, 258
анонимные, 262
Объект, 28
Объект‑функция, 525
less, 525
Объявление
доступа, 370
класса, 360
опережающее, 297
переменных, 57
ООП, 25; 264
Оператор
!=, 475
&, 125
*, 125
==, 475
const_cast, 488
defined, 579
delete, 230
dynamic_cast, 483
new, 230; 430
reinterpret_cast, 490
sizeof, 227; 263
static_cast, 489
typeid, 474; 480; 486
XOR, 279; 221
ввода, 441
вывода, 441
декремента, 50
деления по модулю, 68
дополнения до 1, 221
И, поразрядный, 219
ИЛИ, поразрядный, 220
индексации, 340
инкремента, 50; 323
исключающее ИЛИ, 219; 221
НЕ, 221
присваивания, 38; 336
разрешения контекста, 297; 374
разрешения области видимости, 268; 297;374
разыменования адреса *, 523
Операторы, 68
арифметические, 68
декремента, 69
инкремента, 69
логические, 71
отношений, 71
поразрядные, 218
приведения типов, 483
присваивания,
составные, 225
сдвига, 222
Операция
приведения типов, 75
Опережающее объявление, 297
Отображение, 525; 545
Очередь, 526
приоритетная, 526
‑П‑
Параметры, 44
ссылочные, 181
формальные, 154
Перегрузка
конструкторов, 298
операторов, 319
ввода‑вывода, 441
шаблона функции, 401
функций, 190
Переменные, 38
глобальные, 59; 154
инициализация, 66
локальные, 57
Перечисление, 214
fmtflags, 447
iostate, 470
openmode, 457
Позднее связывание, 393
Поле
сборное
ios::basefield, 448
ios::adjustfield, 448
ios::floatfield, 448
Полиморфизм, 28; 377
Полиморфный класс, 381; 475
Порожденная функция, 398
Поток, 439
cerr, 440
cin, 440
clog, 440
cout, 440
stderr, 585
stdin, 585
stdout, 585
wcerr, 440
wcin, 440
wclog, 440
wcout, 440
двоичный, 439
стандартный
ввода, 585
вывода, 585
ошибок, 585
текстовый, 439
Предикат, 524
Приоритетная очередь, 526
Пространство имен, 494
std, 35; 438; 500
неименованное, 499
Прототип функции, 43; 171
Псевдопеременные
_ _FILE_ _, 580
_ _LINE_ _, 580
‑Р‑
Раннее связывание, 393
Распределитель памяти, 524
Расширение типа, 74
Реализация, 398
Рекурсия, 173
Ритчи, Дэнис, 23
‑С‑
Связывание
позднее, 393
раннее, 393
Специализация
класса
явная, 413
функции, 398
явная, 399
Спецификатор
explicit, 510
inline, 574
private, 355
protected, 357
public, 355
компоновки, 515
минимальной ширины поля, 586
Спецификатор класса памяти
auto, 206
extern, 206
register, 211
Спецификатор типа
const, 202
volatile, 204
Список, 536
сортировка, 541
Ссылки
на объекты, 291
на производные типы, 381
независимые, 188
Стандарт
С89, 584
С99, 584
Стандарт С, 23
Стандартная библиотека C++, 54
Стандартная библиотека шаблонов, 54
Стек, 152; 526
Страуструп, Бьерн, 25; 70
Строка, 36; 106
Строковый литерал, 106
Структура, 238
‑Т‑
Таблица строк, 136
Тег, 255
Тип
basic_string, 559
BinPred, 524
bool, 57; 74
char, 56
clock_t, 298
double, 56
float, 56
int, 56
iterator, 523
nothrow_t, 436
off_type, 468
pos_type, 470
ptrdiff_t, 554
size_t, 432; 504
streamsize, 451
string, 559
UnPred, 524
void, 57
wchar_t, 56
wstring, 559
‑У‑
Указатели, 123
на объекты, 289
на производные типы, 378
на функции, 502
на член класса, 517
Управляющие последовательности, 65
Условное выражение, 79
‑Ф‑
Фабрика объектов, 478
Файл, 439
Файловый указатель, 592
Факториал числа, 174
Флаг
boolalpha, 448
dec, 448
fixed, 448
hex, 448
internal, 448
left, 448
oct, 448
right, 448
scientific, 448
showbase, 448
showpoint, 448
showpos, 448
skipws, 448
unitbuf, 448
uppercase, 448
Флаг знака, 62
Формальные параметры, 58
Функции, 24; 147; 294
виртуальные, 381
встраиваемые, 283
манипуляторные, 454
обобщенные, 396
перегрузка, 190
сравнения, 524
Функция, 36; 41
abort(), 417; 419
abs(), 43; 167; 191; 403
asctime(), 252
assign(), 563
atof(), 164
bad(), 471
before(), 475
begin(), 529
clear(), 471
clock(), 213
close(), 458
compare(), 566
end(), 529
eof(), 463
erase(), 529; 532
exit(), 418; 419
fabs(), 191
fail(), 471
fclose(), 595
feof(), 595
ferror(), 597
fgetc(), 595
fill(), 451
find(), 565
flags(), 449
flush(), 467
fopen(), 593
fprintf), 600
fputc(), 594
fread(), 597
free(), 233
fscanf(), 600
fseek(), 599
fwrite(), 597
gcount(), 463
get(), 460; 465
getline(), 466
gets(), 107
good(), 471
insert(), 529; 532; 537
isalpha(), 114
kbhit(), 139
labs(), 191
localtime(), 251; 252
main(), 46; 162
make_pair(), 546
malloc(), 233; 431
merge(), 537
name(), 475
open(), 456
operator, 320
operator(), 525
peek(), 467
precision(), 451
printf(), 585
push_back(), 529; 537
push_front(), 537
put(), 460
putback(), 467
qsort(), 503
rand(), 138; 478
rdstate(), 470
read(), 461
remove(), 600
rewind(), 597
rfind(), 565
scanf(), 588
seekg(), 468; 470
seekp(), 468; 470
setf(), 448
showflags(), 450
splice(), 537
strcat(), 109
strcmp(), 110
strcpy(), 109; 171
strlen(), 111; 161
tellg(), 470
tellp(), 470
terminate(), 417
time(), 251
tolower(), 113
toupper(), 113; 135
unexpected(), 427
unsetf(), 448
width(), 451; 452
write(), 461
операторная, 320
параметризованная, 45
порожденная, 398
преобразования, 519
шаблонная, 398
‑Ц‑
Цикл
do‑while, 93
for, 49; 82
while, 91
бесконечный, 87
вложенный, 97
‑Ш‑
Шаблон, 396
Шаблонная функция, 398
Дата добавления: 2018-09-22; просмотров: 439; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!