- •Раздел 4. Разработка по Тема 4.1. Проектирование интерфейса с пользователем
- •4.1.1. Типы пользовательских интерфейсов.
- •4.1.2. Пользовательская и программная модели интерфейса.
- •4.1.3. Разработка диалогов.
- •4.1.4. Основные компоненты графических пользовательских интерфейсов.
- •Тема 4.2. Реализация графических пользовательских интерфейсов.
- •4.2.1. Диалоги, управляемые пользователем.
- •4.2.2. Диалоги, управляемые системой.
- •4.2.3. Использование метафор.
- •4.2.4. Технология Drag and Drop.
- •4.2.5. Интеллектуальные элементы.
- •4.3.1. Базовые типы данных.
- •Константы
- •Область действия имен
- •4.3.2. Указатели и адресная арифметика.
- •4.3.3. Составные типы данных. Структуры
- •Битовые поля
- •Определение типов
- •Перечислимые типы
- •4.3.4. Выражения и операции.
- •4.3.5. Управляющие конструкции. Условные операторы
- •Операторы циклов
- •4.4.1. Статические одномерные массивы.
- •4.4.2. Статические многомерные массивы.
- •4.4.3. Динамические массивы.
- •4.4.4. Массивы указателей.
- •4.5.1. Стеки.
- •4.5.2. Очереди.
- •4.5.3. Списки.
- •4.5.4. Бинарные деревья.
- •4.6.1. Объявление классов и экземпляров классов.
- •4.6.2. Инкапсуляция данных и методов.
- •4.6.3. Конструкторы классов.
- •Конструктор по умолчанию
- •Конструктор копирования
- •4.6.4. Деструкторы классов.
- •4.7.1. Разделы в описании класса.
- •4.7.2. Friend-конструкции.
- •4.7.3. Статические члены классов.
- •4.7.4. Использование описателя const в классах.
- •4.8.1. Вложенность классов.
- •4.8.2. Наследование данных и методов.
- •4.8.3. Типы наследования.
- •4.9.1. Полиморфизм раннего связывания.
- •4.9.2. Полиморфизм позднего связывания и виртуальные функции.
- •4.9.3. Абстрактные методы и классы.
- •4.10.1. Функции консольного ввода-вывода.
- •4.10.2. Функции файлового ввода-вывода.
- •4.10.3. Использование библиотеки классов потокового ввода-вывода.
- •4.11.1. Перегрузка операций.
- •4.11.2. Шаблоны функций.
- •4.11.3. Шаблоны классов.
- •4.11.4. Обработка исключений.
- •Тема 4.12. Com-технология.
- •4.12.1. Основные понятия.
- •4.12.2. Типы интерфейсов.
- •Свойства интерфейсов
- •Типы интерфейсов
- •4.12.3. Типы com-объектов.
- •4.12.4. Фабрика классов.
- •Тема 4.13. Построение com-сервера.
- •4.13.1. Язык idl.
- •Содержимое файла idl
- •4.13.2. Определение пользовательского интерфейса.
- •4.13.3. Реализация пользовательского интерфейса.
- •4.13.4. Создание тестового клиента.
- •Тема 4.14. Обзор платформы ms .Net.
- •4.14.1. Общая идея архитектуры .Net.
- •4.14.2. Достоинства и недостатки .Net.
- •4.14.3. Схема трансляции программ в .Net.
- •4.14.4. Язык msil.
- •4.14.5. Объектно-ориентированная модель .Net.
Область действия имен
Большинство элементов языка, именуемых с помощью идентификаторов, должны быть объявлены до их первого использования в программе. Все идентификаторы действительны в некоторой области текста программы, называемой областью действия имен. Идентификатор, объявленный внутри функции, имеет область действия от точки объявления до конца функции. Глобальный, объявленный вне функции, идентификатор имеет область действия от точки объявления до конца файла. В программах на языке C++ может быть только одно определение каждого глобальною идентификатора и произвольное количество его повторных объявлений. Компилятор проверяет идентичность всех его объявлений. Если она нарушена, то генерируется сообщение об ошибке, и процесс трансляции прекращается.
В C++ любая программная переменная создается, то есть ей отводится память, в точке программы, где она определяется, и уничтожается (освобождается память ею занятая) в точке, где кончается область действия ее имени. Переменные, объявленные вне функций (глобальные), создаются и инициализируются в этой точке программы и живут в течение работы всей программы. То же самое происходит с переменными, снабженными описателем static (но они могут быть и локальными). Все глобальные переменные видны (действуют) во всех модулях программы. Область действия локальных переменных ограничивается функцией или блоком {...}, внутри которых они были определены. По умолчанию все глобальные переменные и переменные static автоматически инициализируются нулями в точке их определения, если нет какой-либо другой явной инициализации в этой точке. Значения локальных переменных после их объявления не определены. Использование таких переменных (до явного присвоения им какого-либо значения) не сулит ничего хорошего и чаще других причин является источником ошибок.
Если какая-то локальная переменная имеет такое же имя, что и глобальная переменная, то глобальная становится невидимой (к ней нет доступа) в области действия локальной переменной, так же, как и в большинстве других языков программирования. Но C++ дает способ доступа к глобальной переменной в этом случае. Операция обзора :: (scope operator) позволяет увидеть скрытую глобальную переменную.
Рассмотрим пример программы, состоящей из двух модулей, которая иллюстрирует доступ к скрытой (hidden) глобальной переменной в языке C++.
#include <stdiо.h> // Подключение файла заголовков
int i=16; // Глобальная переменная
void рrос() // Внешняя функция
{
int i=l; // Локальная переменная
printf ("\n\t Proc: i=%d",i);
printf ("\n\t Proc: global i=%d",::i);
{
int i=2;
printf ("\n\t Proc: i=%d",i);
printf ("\n\t Proc: global i=%d",::i); // Присвоение глобальной I
}
}
void main (void) // Главная функция. С нее начинается выполнение программы
{
printf ("\n\t Main: i=%d",i):
ргос():
printf ("\n\t Main: i=%d\n",i);
}
Результат работы программы примера выглядит следующим образом:
Main: i=16
Proc: i=l
Proc: global i=16
Proc: i=2
Proc: global i=16
Main: i=16
Выведенные значения иллюстрируют возможности операции обзора (:: — scope operator), позволяющей видеть глобально объявленную переменную i в области, где действуют две локально объявленные переменные i, каждая в своем блоке {...} функции рrос. Внутри main действует только одна переменная i — глобальная. Говорят, что внутри ргос локальная i скрывает (hides) глобальную, однако операция :: позволяет получить доступ (access) к ней. Первая строка программы есть директива препроцессора, которая предписывает ему перед компиляцией всего модуля включить содержимое файла с именем stdio.h в данное место программы. Файлы заголовков (header files) имеют расширение .h. Многие из них поставляются вместе с той или иной интегрированной средой разработчика программ на языке С или С++. Файл stdio.h содержит в частности прототипы функций для форматированного ввода и вывода (scanf, printf) переменных стандартных типов.