Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпора 130стр.doc
Скачиваний:
93
Добавлен:
15.06.2014
Размер:
2.49 Mб
Скачать

14) Объекты в Win32. Классификация объектов. Функции работы с объектами Win32.

Категории объектов:

  • Объекты User objects (таблицы акселераторов, каретка, курсор, рабочий стол, иконки, окна, положения окон). Для этих объектов может быть создан только единственный дескриптор, нет ограничений для использования в рамках одного процесса, но в рамках системы их не может быть больше 65535, после использования эти объекты должны быть корректно удалены.

  • Объекты GDI (карандаш, расширенный карандаш, кисть, растровые изображения, контексты устройств, расширенные метафайлы, шрифты, дескриптор контекста памяти, метафайлы, палитры, регионы). Особенности: для них существует только один дескриптор, дескрипторы уникальны для всех процессов, в рамках одного процесса не более 16384 дескрипторов.

  • Объекты ядра (change notification – отслеживает изменения файлов, event log, find file – описывает текущее состояние процесса поиска, heap – описывает кучу, module - описывает динамические библиотеки DLL, update resourse – обновление ресурсов). Особенности: ограничения на количество объектов у процессов должно быть не более, чем 230; у каждого объекта существует структура Security_Attributes (права доступа), при доступе к этим объектам проверяется возможность доступа к ним.

Задачи менеджера объектов: создание объекта, проверка прав использования, создание дескриптора объекта, управление квотами (правила, гораничивающие использование) на объекты, создиние копии дескриптора, закрытие дескриптора. Функции менеджера объекта: создание

объекта, получение дескриптора, чтение изменений атрибутов дескриптора, закрытие дескриптора, удаление объекта. Классификация объектов:

объекты, имеющие один дескриптор

объекты, имеющие много дескрипторов к одному объекту.

Наследование дескриптора: если при создании объектов в структуре Security_Attributes поле InheritHandler равно 1, то дескриптор может быть наследуемым, т.е. создается копия для другого процесса. Клонирование дескриптора происходит при помощи функции DuplicateHandler (на вход – дескриптор, на выход – дубль дескриптора). Используется для передачи другому процессу. При удалении дескриптора объект удаляется в том случае, если этот дескриптор был последним. Объекты, которые можно дублировать: acces taken, communications device, console input, desktop, event, file, mutex, pipe, process. Закрытие дескрипторов: CloseHandler. Чтение и запись атрибутов: SetHandlerInformation, GetHandlerInformation (тут можно установить флаг для наследования).

15)Описание отношения наследования между классами на языке C++. Виртуальные классы.

Композиция есть включение класса А как элемента класса Б.

Наследование - создание нового класса из существующего. Употребляется для повторного использования кода.

Наследование:

  1. Простое. Родитель, т.е. базовый класс у наследника только 1.

  2. Множественное. Несколько родителей. class A : B,С{}

  3. Открытое. Открытые и защищенные элементы базового становятся открытыми и защищенными наследника. (class A : public B, B - базовый., А – наследник)

  4. Закрытое. Открытые и защищенные элементы базового – закрытыми наследника.

  5. Защищенное. Открытые и защищенные элементы базового – защищенными наследника.

Базовый класс: 1)Прямой (Явно перечисляется в заголовке класса), 2)Косвенный. (в заголовке класса не перечисляется, но наследуется иерархически.

Особенности производного класса:

  1. не имеет доступа к закрытым членам своего базового класса (кроме спец функций доступа из открытого интерфейса базового класса)

  2. может доступаться к открытым и защищенным элементам базового класса.

  3. отношения базового и наследника строго иерархичны.

  4. при создании объекта класса наследника требуется вызвать конструктор базового класса (конструкторы и операции присваивания не наследуются)

  5. объект производного класса = объект базового (производный класс имеет элементы, соотв. Элементам базового), но объект базового класса != объект производного.

(потому что у производного класса элементов больше, и они могут остаться неопределенными)

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

virtual function_type function_name()

если виртуальная в базовом то по умолчанию виртуальная и в наследнике.

Полиморфизм (polymorphism). Он возникает при создании иерархии классов - группы классов, связанных отношениями вида и подвида, если все они используют общий метод. Например, в иерархии классов Vehicle (Транспортные средства) таким методом может быть Move() - Движение. Реализаци этого метода для каждого из подклассов Car(), Plane() и Boat() - Автомобиль, Самолет и Лодка соответственно - может весьма различаться. Вызов метода на вершине иерархии (Vehicle) приведет к вызову специализированного метода класса-потомка.

Полиморфные функции, т.е. таких функции, в которых алгоритм специфицирован таким образом, что может быть применен к аргументам различных типов.

Использование виртуальной функции:

Динамическое связывание или позднее связывание: во время выполнения программы. Используется таблица виртуальных методов ( массив указателей на функции).

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

Указатель_базового_на_Объект_наследника

-> виртуальная_функция_базового();

Тип возвращаемого значения должен быть тот же.

Статическое связывание: во время компиляции.

Имя_заданного_объекта.виртуальная_функция().