Материалы книги получены с http://www.itlibitum.ru/
Преобразование указываемого объекта в грань
Итак, вы хотите получить грань по имеющемуся указываемому объекту. Для этого существует много способов, однако наиболее соответствующий стилю C++ заключается в использовании операторов преобразования.
class View {
public:
operator ViewEvents() { return new ViewEvents(this); }
operator ViewDrawing() { return new ViewDrawing(this); }
};
Другой вариант - разрешить пользователю напрямую использовать конструкторы класса грани:
ViewEvents ve(aView);
Об их достоинствах и недостатках можно спорить долго, но лично я предпочитаю первый способ по причинам, о которых мы вскоре поговорим. Существует еще один способ, который тоже заслуживает упоминания - присвоить каждому типу грани уникальный идентификатор и затем создать единую, многоцелевую функцию генерации граней для всех классов. Такая функция получает идентификатор типа грани в качестве аргумента и возвращает грань, если она поддерживается объектом, и NULL - в противном случае. Те из вас, кому приходилось пользоваться технологиями СОМ и OLE компании Microsoft, узнают знакомую функцию QueryInterface, поддерживаемую всеми объектами.
Назад Содержание Далее
|