
- •Введение в ооп
- •Алгоритмическое и объектно-ориентированное программирование
- •3.Основные понятия объектно-ориентированного программирования
- •4. Объекты и их атрибуты
- •5. Структура визуальной среды
- •4. Страж кода (Code Guard).
- •7. Синтаксис и семантика классов
- •8. Доступ к элементам класса (объекта)
- •9. Встраиваемые функции-элементы
- •10. Создание экземпляров класса. Конструктор
- •Создание объекта в динамической памяти
- •11. Уничтожение объектов класса. Деструктор
- •12. Статические компоненты класса
- •13. Постоянные и модифицируемые элементы-данные
- •14. Передача адреса объекта компонентной функции. Указатель this
- •15. Конструктор копии
- •16. Перегрузка функций и операций
- •17. Операция присваивания для объектов
- •18. Функции преобразования типа объекта
- •19. Наследование. Общие положения
- •Влияние ключа доступа при наследовании
- •20. Простое наследование
- •21. Множественное наследование
- •22. Виртуальное наследование
- •23. Виртуальные функции
- •24. Динамический полиморфизм
- •25. Абстрактные классы
- •26. Дружественные функции и классы
- •27. Шаблоны
- •28. Стандартная библиотека шаблонов. Общие положения
- •29. Примеры контейнеров
- •30. Обработка исключительных ситуаций. Общие положения
- •Синтаксис и семантика генерации и обработки исключительных ситуаций
- •32. Использование объекта класса для возврата параметров исключений
- •33. Ограничение перечня возбуждаемых исключительных ситуаций
- •34. Повторное возбуждение исключительной ситуации. Вложенные блоки try
- •35. Организация проектировани и документирования разработки объектно-ориентированных программ
- •1. Отображение классов.
- •2. Отображение отношений между классами
4. Объекты и их атрибуты
Объект это поименованная область основной памяти, которая проинициализирована конкретными значениями. Эта область может быть ячейкой памяти (переменная) или структурированной совокупностью ячеек, в общем случае разнотипных.
Значение параметров объекта (содержимое ячеек памяти, отведенных для объекта) может быть определено компилятором при интерпретации его объявления, если задано инициализирующее выражение, при его создании (инициализация в теле конструктора), и в ходе выполнения программы с помощью операции присваивания.
Обращение к ячейкам памяти объекта может быть реализовано с помощью имени ячейки, индексированного имени, разыменованного указателя, уточненного имени, косвенно уточненного имени, ссылки на объект.
Леводопустимыми в операциях присваивания могут быть:
скалярные объекты;
индексированные переменные;
имена указателей;
разыменованные указатели;
уточненные имена;
косвенно уточненные имена;
ссылки на объекты;
выражения с операцией разыменования;
вызовы функций, возвращающие ссылки на объекты.
С размещением объекта в памяти связаны следующие понятия: тип ячейки памяти, класс памяти (место размещения), область действия, видимость объекта, время жизни, тип компановки.
Функции типа объекта:
определяет объем памяти для объекта;
задает совокупность допустимых операций;
обеспечивает интерпретацию двоичного кода;
используется для контроля типов при присваивании.
Класс памяти (auto, register, static, dynamic, extern) определяется либо при определении либо по контексту (месту размещения определения в тексте программы).
Область действия - это часть программы, где переменная (объект) в принципе доступна для программного кода. Область действия может быть ограничена проектом, файлом, классом, функцией, блоком, инструкцией. Определяется местом размещения объявления объекта в программе. Если объект объявлен в теле функции (блока), областью его действия является тело функции (блока) (локальный объект; размещается в автоматической области памяти). Если объект объявлен вне какой-либо функции, областью его действия является весь модуль (файл) (глобальный объект; размещается в статической области памяти). Если используется описание (прототип) объекта – функции, то область действия ограничивается самой инструкцией описания. Если объект объявлен с атрибутом extern, областью его действия является все файлы программы (проекта) вне зависимости от места размещения инструкции объявления. Если создается объект как экземпляр класса, вне зависимости от области действия, он размещается в динамической области памяти.
Видимость объекта рассматривается для глобальных объектов и обычно совпадает с областью действия, если объект не определен в функции (блоке) повторно. Если объект переопределен в теле функции, то в теле функции создается одноименная локальная копия объекта. В этом случае локальный объект скрывает глобальный. Чтобы получить доступ в теле функции к одноименному глобальному объекту, используется операция расширения области видимости « :: ».
Пример:
char cc[] = “ Внешний массив символов”;
void func(void)
{ char cc[] = “ Внутренний массив”;
cout<<’\n’<<cc; // Обращение к локальному массиву
cout<<’\n’<< ::cc; // Обращение к глобальному массиву
}
void main(void)
{ void func9void);
func();
}
Время жизни локального объекта определяется от момента вызова функции (начала блока) до момента выхода из функции (блока). Вне функции(блока) значение локального объекта не доступно. Можно сохранить значение локального объекта для повторного вызова функции, если объявить его с атрибутом static, например, static int a = 0; (переменная а инициализируется нулем только при первом вызове функции). При этом областью действия локального статического объекта является тело функции.
Время жизни глобального объекта определяется моментом инициации приложения и моментом его завершения.
Тип компановки или тип связывания определяет соответствие идентификатора конкретному объекту или функции в программе, исходный текст которой размещен в нескольких файлах (модулях). В этом случае каждому имени, используемому в нескольких файлах, может соответствовать либо один объект (функция), общий для всех файлов, либо по одному и более объектов в каждом файле. Файлы программы (модули) могут транслироваться отдельно, и в этом случае возникает проблема установления связи между одним и тем же идентификатором и единственным объектом, которому он соответствует.
Такие объекты (функции) и их имена нуждаются во внешнем связывании, которое выполняет компановщик при объединении модулей программы.
Для остальных объектов, которые локализованы в файлах, используется внутреннее связывание.
Внешнее связывание задается явным использованием атрибута extern при описании объектов.