С++ для начинающих


         

это часть механизма идентификации типов


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
    Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий