это часть механизма идентификации типов
else
if ( RiSpotLight *pslite =
dynamic_cast<RiSpotLight*>( plight ))
pslite->scls.cast_shadow_map();
// и так далее
(Оператор dynamic_cast – это часть механизма идентификации типов во время выполнения (RTTI). Он позволяет опросить тип объекта, адресованного полиморфным указателем или ссылкой. Подробно RTTI будет обсуждаться в главе 19.)
Пользуясь множественным наследованием, мы можем инкапсулировать подтипы SCLS, защитив наш код от изменений при добавлении или удалении источника освещения (см. рис. 18.1).
SoNode SCLS
SoLight
SoPointLight SoSpotLight SoDirectionalLight
RPointLight RSpotLight RDirectionalLight
Рис. 18.1. Множественное наследование источников освещения
class RiDirectionalLight :
public SoDirectionalLight, public SCLS { ... };
class RiSpotLight :
public SoSpotLight, public SCLS { ... };
// ...
SoLight *plight = next_scene_light();
if ( SCLS *pscls = dynamic_cast<SCLS*>(plight))
pscls->cast_shadow_map();
Это решение несовершенно. Если бы у нас был доступ к исходным текстам Open Inventor, то можно было бы избежать множественного наследования, добавив к SoLight член-указатель на SCLS и поддержку операции cast_shadow_map():
class SoLight : public SoNode {
public:
void cast_shadow_map()
{ if ( _scls ) _scls->cast_shadow_map(); }
// ...
protected:
SCLS *_scls;
};
// ...
SdSoLight *plight = next_scene_light();
plight-> cast_shadow_map();
Самое распространенное приложение, где используется множественное (и виртуальное) наследование, – это потоковая библиотека ввода/вывода в стандартном C++. Два основных видимых пользователю класса этой библиотеки – istream (для ввода) и ostream (для вывода). В число их общих атрибутов входят:
- информация о форматировании (представляется ли целое число в десятичной, восьмеричной или шестнадцатеричной системе счисления, число с плавающей точкой – в нотации с фиксированной точкой или в научной нотации и т.д.);
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий