Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛЕКЦИИ Программирование и основы алгоритмизации...doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.5 Mб
Скачать

Доступ к свойствам и функциям-элементам (методам) объектов, переменным и функциям в приложении, содержащем одну форму

1) В функциях-элементах доступ к объектам-компонентам осуществляется через указатели на эти объекты, объявленные в заголовочном файле модуля.

Label1->Caption=..//доступ к свойству Caption через указатель Label1

Можно (*Label1).Caption, но принято без разыменования, как выше.

Label1->Hide(); //доступ к методу Hide() через указатель Label1

Label1->Visible=false; //делает метку невидимой

2) Пусть имеются две функции с именем fun, одна – в классе (функция-элемент), а другая – вне класса. Тогда из третьей функции, не принадлежащей классу, ссылка на первую Form1::fun(), т.е. с именем класса, а на другую – непосредственно по имени fun.

3) Обращение к переменным и функциям, описанным внутри и вне класса, из функций-элементов – одинаковое, просто по имени.

4) Обращение из функций, описанных вне класса, к переменным и функциям вне класса – просто по имени, а к переменным и функциям в классе – через имя объекта класса. Внешние по отношению к классу функции получают доступ ко всему, объявленному в классе, через ссылку на объект Form1.

5) Переменные, объявленные вне класса, остаются в одном экземпляре. А переменные класса при создании нескольких объектов одного класса тиражируются по числу объектов. В каждом объекте будет своя переменная и все они будут никак не связаны друг с другом.

Доступ к свойствам и функциям-элементам (методам) объектов, переменным и функциям в приложении, содержащем несколько форм (Form1 – Unit1 (.h, .cpp), Form2 – Unit2 (.h, .cpp))

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

Например, в Unit1 объявлена глобальная переменная int a1=10; В модуле Unit2 можно использовать эту переменную, если там объявить extern int a1, вне зависимости от того, включен или нет директивой #include файл Unit1.h в модуль Unit2.

2) Если в Unit2 не дано объявление a1, а файл Unit1.h включен в Unit2 директивой #includeUnit1.h, то в Unit2 будет создана копия a1, инициализированная согласно объявлению в Unit1.h. Эта копия будет полностью изолирована от a1 в Unit1. В модулях Unit1 и Unit2 будут существовать две различные переменные с именем a1.

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

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

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

6) Элементы (переменные и функции), объявленные в private:, видимы и доступны только внутри данного модуля. При этом из функций-элементов класса – доступ по имени, а из других функций модуля – только со ссылкой на объект данного класса. Если в модуле описано несколько классов, то объекты этих классов взаимно видят элементы, описанные в их разделах private:.

7) Элементы (переменные и функции), объявленные в public:, видимы и доступны для объектов любых классов и для других модулей, в которых директивой #include включен заголовочный файл данного модуля. При этом из объектов того же класса к ним можно обращаться по имени, а из других объектов и функций – только со ссылкой на объект данного класса.

8) Элементы, объявленные в protected:, видимы и доступны для любых объектов внутри данного модуля, а также для объектов классов-наследников данного класса в других модулях. Объекты из других модулей, классы которых не являются наследниками данного класса, защищенных элементов не видят.

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

static void F();