Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы - Программирование (2я часть).docx
Скачиваний:
6
Добавлен:
26.09.2019
Размер:
36.37 Кб
Скачать

Механизм позднего связывания.

Попробуем сформулировать определения.

  • С точки зрения программирования связывание — это процедура установки связи между идентификатором, используемым в коде программы, и его физическим объектом (в общем случае – любым программным компонентом: переменной, процедурой, модулем, приложением и т.д.).

  • Раннее связывание – установка таких связей до начала выполнения программы. Обычно под этим понимается связывание в процессе компиляции исходных модулей и компоновки исполняемого модуля из объектных. Однако сюда же относится процедура проверки наличия всех библиотек времени выполнения (Run-Time module) при запуске приложения.

  • Позднее связывание – установка связей в процессе выполнения программы. Речь обычно идет либо о динамических связях (когда только в ходе работы приложения определяется, какие объекты будут нужны), либо о формировании таких объектов во время работы.

Применение виртуальных методов позволяет реализовывать механизм позднего связывания, при котором определение вызываемого метода происходит на этапе выполнения, а не на этапе компиляции. При этом вызываемый виртуальный метод зависит от типа объекта, для которого он вызывается. При раннем связывании, используемом для не виртуальных методов, определение вызываемого метода происходит на этапе компиляции.

На этапе компиляции строится таблица виртуальных методов, а конкретный адрес проставляется уже на этапе выполнения.

При вызове метода с использованием указателя на класс действуют следующие правила:

  • для виртуального метода вызывается метод, соответствующий типу объекта, на который указывает указатель.

  • для не виртуального метода вызывается метод, соответствующий типу самого указателя.

Принцип инкапсуляции и его реализация в С++. Понятие инкапсуляции.

Инкапсуляция это один из трех основных принципов ООП (Объектно-Ориентированного Программирования), таких как: Инкапсуляция, Полиморфизм и Наследование. Принцип инкапсуляции в ООП реализуется с помощью механизма классов. Инкапсуляция подразумевает под собой сокрытие конкретной логики работы с данными (бизнес-логики) внутри класса. Работа при это осуществляется посредством методов класса.

Определение класса и объектов класса.

Класс является описанием типа данных, то есть описывает структуру объекта, и содержит данные хранимые в нем (полей, данные-члены) и функции для работы с ними (методы, функции-члены). Описать класс возможно следующим образом:

class имя_класса { список_элементов };

Когда класс описан можно создать переменную его типа, которая называется объектом класса. Допустим у нас описан класс CStr, примеры создания объекта класса:

CStr s1; // Создание пустой переменной типа CStr, в которой потом можно будет сохранить объект.

CStr s2(“ааа”); // Создание объекта класса с параметром «ааа» и сохранение его в переменной с именем s2.

CStr s3 = CStr(“bbb”); // Создание объекта класса с параметром “bbb” и сохранение его в переменной с именем s3.

Элементы классов: поля и методы. Видимость элементов класса.

Все элементы класса имеют определенную область видимости. В классе можно использовать один из следующих спецификаторов (специальное слово стоящее перед описываемым элементом), управляющих видимость элементов класса:

  • private (элементы видимые только внутри класса – скрытые элементы)

  • public (элементы видимые как внутри так и вне класса – открытые элементы, формируют фактически интерфейс доступа к классу)

  • protected (элементы видимые только внутри класса и его наследниках)

По-умолчанию вид доступа – private. Действие любого спецификатора распространяется до следующего спецификатора и можно задавать таким образом секции, пример:

class имя_класса { private: int value; // приватное поле в классе bool checkValue() { return value > 0; } // приватный метод в классе … public: int getValue() { return value; } // общедоступный метод в классе. … }