С++ - язык, который изучается постепенно.Проверка граней
                   Справочники Всё для создания сайта

Ссылки


Home
Бизнес
Справочники
Советы







Материалы книги получены с http://www.itlibitum.ru/

Проверка граней

Давайте еще немного расширим эту идиому и предположим, что некоторая грань может

поддерживаться или не поддерживаться объектом. О том, почему и как это может произойти, мы поговорим во время изучения переходных типов далее в этой главе, а пока ответим на вопрос: как клиент может определить, поддерживается ли некоторый объект некоторой гранью? Решение построено на другом С++-изме - перегрузке оператора !.

class ViewEvents {

private:

View* view;

public:

ViewEvents(View* v) : view(v) {}

bool operator!() { return view == NULL; }

// И т.д.

};

// В клиентском коде

ViewEvents ve(aViewGemstone);

if (!ve) {

cerr << "Вид не обрабатывает событий!" << endl;

throw interface_error;

}

Предполагается, что aViewGemstone относится к кристаллам вида, о которых говорилось выше, и содержит операторную функцию operator ViewEvents(). Ключевая строка ViewEvents ve(aViewGenistone) работает в два этапа: сначала вызывается операторная функция operator ViewEvents(), выполняющая преобразование, а затем ve конструируется с помощью конструктора копий ViewEvents. Если кристалл вида решает, что данный вид не обрабатывает событий, он может сконструировать экземпляр ViewEvents с view, равным NULL. Затем оператор ! проверяет возвращенную грань. Функции грани также могут проверять наличие объекта перед тем, как пытаться что-то делегировать ему.

Void ViewEvents::DoSomething()

{

if (!*this) // то есть if (view == NULL)

// Инициировать исключение

view->DoSomething();

}


Назад    Содержание    Далее    

Home  Создание сайтов  Учебник по записи CD  Справочник Web дизайнера Самоучитель IE PHP и MySQL Компьютерные сети С++ E-mail me

Copyright 2007. Климов Александр. All Right Reserved.
Hosted by uCoz