Статические объекты создаются один раз...209
Статические переменные подобны обычным локальным переменным с тем отличием, что они создаются только один раз. Это очевидно, поскольку статические переменные сохраняют своё значение от вызова к вызову функции. В отличие от С, который может инициализировать статическую переменную в начале программы, С++ дождётся, когда управление перейдёт к строке с объявлением статической переменной, и только тогда начнёт её создание. Разберёмся в приведённой ниже простой программе.
/* ConstructStatic — демонстрация однократного */
/* создания статических объектов */
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std ;
class DoNothing
{
public :
DoNothing( int initial )
{
cout << "DoNothing сконструирован со значением "
<< initial
<< endl ;
}
} ;
_________________
209 стр. Глава 17. Аргументация конструирования
void fn( int i )
{
cout << "Функции fn передано значение " << i << endl ;
static DoNothing dn( i ) ;
}
int main( int argcs , char* pArgs[ ] )
{
setlocale ( LC_ALL , ".1251" ) ; /* печать кириллицы */
fn( 10 ) ;
fn( 20 ) ;
/* Пауза для того, чтобы посмотреть на результат работы программы */
system( "PAUSE" ) ; return 0 ;
}
После запуска этой программы на экране появится следующее:
Функции fn передано значение 10
DoNothing сконструирован со значением 10
Функции fn передано значение 20
Press any key to continue...
Обратите внимание, что сообщение от функции fn( ) появилось дважды, а сообщение от конструктора DoNothing — только при первом вызове fn( ).
Больше книг — больше знаний!
Заберите 20% скидку на все книги Литрес с нашим промокодом
ПОЛУЧИТЬ СКИДКУ