/** Page structure tweaks for layout editor wireframe */ body#layout #main, body#layout #sidebar { padding: 0; } -->

среда, 21 декабря 2011 г.

ՏԻՊԵՐԻ ԲԱՑԱՀԱՅՏ ՁԵՎԱՓՈԽՈՒԹՅՈՒՆՆԵՐ


Տիպերի բացահայտ  ձևափոխություն կատարելու համար նա-խատեսված է  հետևյալ ընդհանուր գրելաձև ունեցող հրահանգը`
                         cast-name <  տիպ > ( արտ. );
Այստեղ  cast-name –ը  static_cast , const _cast ,  dynamic _cast     կամ  reinterpret_cast    առանցքային բառերից որևէ մեկն է, իսկ   տիպ –ը այն   տիպն է, որին բերվում է արտ.  արտահայտությունը:
static_cast առանցքային բառով իրագործվում են տիպերի  բոլոր այն ձևափոխությունները, որոնք կարող են կատարվել անբացահայտ ըստ լռելյայն սկզբունքի: Այդ տիպի ձևափոխությունից հետո կոմպիլյատորը տվյալի ճշտության կորուստի վերաբերյալ հաղորդագրութ-յուն  չի տալիս: Օրինակ`



                           double d1=97.25;
                           int   i1= static_cast <  int  >( d1 ) ;
Բացի դրանից, տիպերի static_cast  ձևափոխության միջոցով կարելի է ձևափոխել անորոշ void տիպի  ցուցանշիչը որոշակի տիպով ցուցանշիչի, թվաբանական տիպը – թվարկվող (enum) տիպի,      հիմնային դասը - ածանցյալ դասի: Օրինակներ`
                                  int      i1=1024;
                                  int      *pi=&i1;
                                  char   *pc=0;
                                  void    *pv=0;
                                 enum   ma {  first=1, second,  third  }
                                               extern    int    i1;
     pv= pi;   //  ճիշտ է, pv-ն ստանում է i1 փոփոխականի հասցեն
     pc= pv; // ճիշտ չէ, չկա ներկառուցված ստանդարտ  ձևափոխություն
              pc= static_cast  <  char*  >( pv ) ; //  ճիշտ է                        
              ma ma1 =   static_cast  <  ma  > ( i1 ) ;  
i1-ի  ձևափոխումը    ma-ի    ճիշտ  կլինի միայն այն դեպքում,    եթե  i1-ը  ունենա 1, 2 և 3 արժեքներ:
Հիմնային դասը  ածանցյալ դասի ձևափոխման օրինակներ կդիտարկվեն դաս տիպի տվյալների ուսումնասիրման ժամանակ:
const _cast  առանցքային բառը օգտագործվում է հաստատուն տիպերով տվյալները փոփոխվող տիպերով դարձնելու համար և ընդհակառակը: Օրինակ`
              const   char   *pc_str;
              char   *pc =  const _cast  <  char*  >( pc_str ) ;
dynamic _cast    առանցքային բառը օգտագործվում է  ծրագրի կատարման ժամանակ նախնական տիպեր տալու համար (ran – time   type identification):
reinterpret_cast  առանցքային բառը օգտագործվում է  օբյեկտի ներքին ներկայացմանը այլ   մեկնաբանություն տալու համար: Օրինակ`
              complex<double>  *pcom;
              char  *pc = reinterpret_cast <  char*  >( pcom ) ;
Տիպերի բացահայտ  ձևափոխության վերևում բերված հրահանգ-ները նախատեսված են C++ լեզվի ստանդարտ տարբերակում: Որպեսզի հնարավոր լինի օգտագործել C և ոչ ստանդարտ C++  լեզուներով գրված նախկին ծրագրերը,  C++ լեզվի ստանդարտ տարբերակում նաև նախա-տեսված է տիպերի բացահայտ  ձևափոխության  C և ոչ ստանդարտ C++  լեզուներում օգտագործվող ձևերը: Այն ունի երկու գրելաձև`
          տիպ  ( արտ. );  // օգտագործվում է ոչ ստանդարտ  C++ լեզվում
          (տիպ  )  արտ.;   //  օգտագործվում է  C  լեզվում

Այդ գրելաձևերը կարելի է օգտագործել static_cast, const _cast      և  reinterpret_cast հրահանգների փոխարեն: Օրինակներ`
                  char  *pc = ( char* )  pcom  ;
                  int   i1 =  ( int )  5.725;
                  char  *pc =  char*   (pcom ) ;
                  int   i1 =  int   ( 5.725 );

Комментариев нет:

Отправить комментарий