Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
40
Добавлен:
16.02.2016
Размер:
382.98 Кб
Скачать

Операторы объявления

Операторы объявления предназначены для объявления новых имен в текущей области видимости. Такими именами могут являться названия типов (class, struct, union, enum, typedef, указатель на член); имена объектов или названия функций.

Операторы объявления могут иметь следующее формальное описание:

оператор-объявления: объявление

Объявленные внутри блока имена являются локальными. Если вне блока существуют такие же имена, то они становятся невидимы внутри блока и к ним следует обращаться, используя оператор ::. Более подробно это рассмотрено в разделе "Область действия имен".

Объявленный внутри функции локальный объект по умолчанию создается с классом памяти auto. C++ по-разному рассматривает объекты, объявленные как auto или как static.

Объявление и инициализация локального объекта

При каждом объявлении объекта класса памяти auto или register происходит размещение этого объекта.

Пример:

// Объявление и инициализация локального объекта в цикле do

{

do

{char ch = _getch(); // Выполняется при каждой итерации цикла

if( (ch == NULL )

continue;

return (ch);

} while( 1 );

}

Удаление объекта, объявленного в цикле, происходит после каждой итерации, при выходе из блока или при передаче управления в точку, расположенную выше объявления этого объекта.

Отметим, что процедура удаления объекта может включать не только удаление объекта из памяти (освобождение памяти), но и выполнение деструкторов (для объектов типа класса).

Так как операторы объявления переменных внутри блока могут быть расположены в любом месте, то следует быть внимательными при выполнении перехода по goto или case (в операторе switch), не допуская перехода, исключающего выполнение необходимого оператора объявления и инициализации. Ошибочным считается только, если используемая переменная не объявлена (но не инициализирована).

Пример:

// Последовательное чтение символов до первого, не являющегося цифрой.

while( 1 )

{ int total = 0;

char ch = _getch();

if( ch >= '0' || ch <= '9')

{ // Оператор goto L1; был бы ошибочным,

// т.к. пропускал бы объявление переменной i.

int i = ch - '0';

L1:

total += i;

} // Переменная i будет удалена при выходе из блока

else

break; // Удаление переменных total и ch.

}

Объявление и инициализация глобального объекта

Глобальный объект при объявлении специфицируется ключевым словом static или extern. Однако по умолчанию если объект объявлен на внешнем уровне (вне всех функций), то он считается глобальным. Для того чтобы объект, объявляемый на внутреннем уровне, рассматривался как глобальный, для него необходимо указать класс памяти static или extern.

Объекты, объявленные внутри блока с ключевым словом static, доступны только внутри этого блока, однако в отличие от локальных объектов они не удаляются при выходе из блока, а сохраняются и могут быть использованы опять при следующем входе в блок. Такие объекты иногда называют статическими локальными объектами. Эти объекты инициализируются только один раз - при первом выполнении оператора объявления. Если при объявлении объекта ему не присваивается никакого значения, то по умолчанию он инициализируется нулем (в соответствии с типом объекта).

Если статический локальный объект является объектом типа класса, то при выполнении оператора объявления вызывается конструктор этого объекта.

Удаление таких объектов указывается в функциях, выполняемых по atexit.

Соседние файлы в папке VC++Баженова