Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Visual Basic 2005 (word97).doc
Скачиваний:
296
Добавлен:
09.02.2015
Размер:
7.31 Mб
Скачать

11.5. Static-переменные

Локальная переменная – это переменная, описанная в теле подпрограммы. После завершения подпрограммы значение локальной переменной теряется. Чтобы этого не происходило, локальную переменную можно объявить с помощью оператора Static. Тогда значение переменной будет сохраняться между двумя обращениями к подпрограмме, но в отличие от глобальной переменной оно будет недоступно для других подпрограмм проекта. Рассмотрим пример использованияStatic-переменной.

Сначала опишем все необходимые подпрограммы.

Процедура printпредназначена для вывода значения целочисленной переменной в окно списка. У нее два входных параметра:stroka– это поясняющий текст, который будет выводиться перед значением переменной,znach– значение, которое надо вывести. Это значение может быть только целым числом. Так как обе переменных в процессе вывода не меняют своих значений, то они передаются по значению. Перед их именами ставим ключевое словоByVal. Обратите внимание, что по правилам языка Visual Basic 2005 режим передачи указывается отдельно для каждого параметра.

Private Sub print(ByVal stroka As String, _

ByVal znach As Integer)

В окно списка lstAвыводим поясняющий текст и значение, которое предварительно преобразуем с помощью функцииStr.

lstA.Items.Add(stroka + Str(znach))

End Sub

Процедура Test4предназначена для увеличения значения целочисленного параметраa, передаваемого по ссылке, на величину, равную количеству обращений к данной процедуре.

Private Sub Test4(ByRef a As Integer)

С помощью оператора Static объявляем локальную переменнуюb,в которой мы будем подсчитывать количество обращений к данной процедуре.

Static b As Integer

Анализируем значение переменной b.

If b = Nothing Then

Если процедура Test4вызвана впервые, то значение переменнойbеще не определено и по умолчанию равно специальной константеNothing. В этом случае зададим начальное значение переменойbравным единице.

b = 1

Else

В противном случае значение переменной bуже определено, значит, данная процедура вызывается не в первый раз. Следовательно, значение переменнойbнадо увеличить на единицу.

b += 1

End If

После завершения условного оператора в переменной bзаписано количество обращений к процедуреTest4. Нам остается только добавить это значение к формальному параметруa.

a += b

Для проверки правильности работы программы выведем значение локальной переменной b, используя процедуруprint.

print("Sub Test4 b=", b)

End Sub

Теперь рассмотрим вызывающую (главную) программу. В ней мы описываем локальную целочисленную переменную a.

Dim a As Integer

Задаем начальное значение этой переменной.

a = 2

Очищаем окно списка от результатов предыдущих запусков программы.

lstA.Items.Clear()

Выводим поясняющий текст.

lstA.Items.Add("Static")

С помощью процедуры printвыводим значение переменнойa,

print("Main prog. a=", a)

Затем пять раз вызываем процедуру Test4для изменения переменной a. После каждого вызова процедуры печатаем значение переменнойaс помощью процедурыPrint.

Test4(a)

print("Main prog. a=", a)

Test4(a)

print("Main prog. a=", a)

Test4(a)

print("Main prog. a=", a)

Test4(a)

print("Main prog. a=", a)

Test4(a)

print("Main prog. a=", a)

Пример работы программы приведен на рис. 73. Проанализируем полученные результаты. Первым выводится начальное значение переменной a. Оно равно двум. Затем управление передается в процедуру Test4. В ней определяется значение переменнойb. Так как это первое обращение к процедуре, то оно задается равным единице. Соответственно значение переменной a увеличивается на единицу и становится равным трем. При следующем обращении к процедуреTest4значение переменнойbбудет уже равно двум. Следовательно, значение переменнойaувеличится на два и будет равно пяти. При третьем обращении к этой же подпрограмме мы получим значение переменнойbравное трем и, соответственно, значение переменнойaстанет равно восьми. На четвертом шаге алгоритма переменнаяbравна четырем, а значение переменнойaбудет равно 12. Наконец после пятого обращения к процедуреTest4мы получаем, что переменнаяbравна пяти, а в переменнойaзаписано значение 17. Таким образом, мы видим, что значениеStatic-переменнойbсохраняется между двумя вызовами подпрограммыTest4, хотя переменнаяbне является глобальной.

Рис. 73.Static-переменные

Приложения. Полные тексты всех рассматриваемых программ

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]