Տիպերի բացահայտ ձևափոխություն կատարելու համար նա-խատեսված է հետևյալ ընդհանուր գրելաձև ունեցող հրահանգը`
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 );
Комментариев нет:
Отправить комментарий