Принципы объектно-ориентированного визуального программирования_____51

Все сказанное относится только к глобальным переменным. Локальные пере-
менные, объявляемые внутри функций, невозможно видеть в другом модуле.

Теперь рассмотрим видимость функций в приложениях, имеющих несколько
модулей. Если в модуле Uniti в его заголовочном файле вне описания класса вы
объявили некоторую функцию F, то в другом модуле Unit2 вы можете использо-
вать ее при выполнении одного из двух условий:

И вы включаете директивой #include в модуль Unit2 заголовочный файл

Unitl.h

• вы повторяете в модуле Unit2 (в заголовочном файле или файле реализации)

объявление функции F

В обоих случаях вы сможете вызвать функцию F из любого места модуля
Unit2.

Если же функция F объявлена в модуле Uniti не в заголовочном файле, а в
файле реализации, то единственный способ использовать ее в модуле Unit2 — по-
вторить в нем объявление функции.

Если вы хотите предотвратить возможность обращения к функции из другого
модуля, ее надо объявить со спецификацией static. Например:

static void F(void);

Подведем некоторые итоги проведенного рассмотрения проблем видимости пе-
рименных и функций.

• Переменные, объявленные в заголовочном файле модуля или в файле его реа-
лизации вне описания класса и функций, являются глобальными. Они доступ-
ны везде внутри данного модуля. Для доступа к ним из внешних модулей в
этих модулях должно быть повторено их объявление (без инициализации) с
добавлением спецификации extern. В рассмотренном примере это относится к
переменным Ch2 и Ch3.

• Функции, объявленные в заголовочном файле модуля вне описания класса,
являются глобальными. Они доступны везде внутри данного модуля. Для до-
ступа к ним из внешних модулей в этих модулях или надо повторить их объяв-
ление, или включить директивой #include заголовочный файл того модуля, в
котором функции описаны. В рассмотренном примере это относится к функ-
ции F3.

• Функции, объявленные в файле реализации модуля, являются глобальными.
Они доступны везде внутри данного модуля. Для доступа к ним из внешних
модулей в этих модулях надо повторить их объявление. В рассмотренном при-
мере это относится к функции F4.

• Элементы (переменные и функции), объявленные в классе в разделе private,
видимы и доступны только внутри данного модуля. При этом из функций,
объявленных внутри класса, к ним можно обращаться непосредственно по
имени, а из других функций —. только со ссылкой на объект данного класса. В
рассмотренном примере это относится к процедуре F1. Если в модуле, описано

|        несколько классов, то объекты этих классов взаимно видят элементы, описан-

'        ные в их разделах private.

• Элементы, объявленные в классе в разделе public, видимы и доступны для
объектов любых классов и для других модулей, в которых директивой #inclu-
de включен заголовочный файл данного модуля. При этом из объектов того же

(класса, к ним можно обращаться непосредственно по имени, а из других объ-
ектов и процедур — только со ссылкой на объект данного класса. В рассмот-
ренном примере это относится к переменной Chl и процедуре F2.

• В классах, помимо обсуждавшихся ранее, могут быть еще разделы protected
— защищенные. Элементы, объявленные в классе в разделе protected, види-