5.5. Supra?nc?rcarea operatorului de conversie

5.5. Supra?nc?rcarea operatorului de conversie

?n orice clas? putem defini ?n form? de func?ii membre un set de operatori de conversie, care va transforma ?n expresii obiectele acestei clase la tipul de date corespunz?tor.

Forma general? a unei func?ii-operator de conversie este urm?toarea:

 

[nume_clas?::]operator tip()

{

   // codul func?iei de conversie

   …

   return expresie;

}

sau

[nume_clas?::]operator tip();

?n defini?ia clasei, ?i defini?ia func?iei

nume_clas?::operator tip()

{

   // codul func?iei de conversie

   …

   return expresie;

}

dup? defini?ia clasei.

Pentru clasa fractie_rationala se cere operatorul de conversie care va transforma obiecte-frac?ii ?n valoarea respectiv? ?n virgul? mobil?. Modific?m din nou clasa fractie_rationala inser?nd ?n sec?iunea public a ei urm?toarea func?ie membr?:

operator double()
 {
    return (double)numarat/(double)numit;
 }


Aceasta ne va da posibilitatea de a folosi obiectele fractie_rationala ?n expresii ?n orice loc unde se admite o valoare de tipul double. De exemplu, ad?ug?m la func?ia main() urm?torul fragment de cod:

fractie_rationala fr17(2,5);
   cout << "fr17=" << fr17 << "=" << (double)fr17 << endl;
 
   double x, y;
   int k;
 
   x=fr17;
   cout << "x=" << x << endl;
 
   y=fr17*fr17;
   cout << "y=" << y << endl;
 
   k=++fr17;
   cout << "k=" << k << endl;
 
//Fragmentul ad?ugat va afi?a urm?toarea ie?ire:
 
fr17=2/5=0.4
x=0.4
y=0.16
k=1


Facem o analiz?.

Expresia (double)fr17 reprezint? conversia obiectului fr17 la valoarea double prin apelul explicit al func?iei de conversie respectiv?.

La atribuirea x=fr17 func?ia de conversie va fi apelat? implicit, ceea ce este echivalent cu x=(double)fr17.

Expresia y=fr17*fr17 este echivalent? cu expresia y=(double)fr17*(double)fr17, fiindc? operatorul * nu este cunoscut ?n clasa fractie_rationala.

Expresia k=++fr17 este echivalent? cu expresia k=(double)(++fr17), fiindc? operatorul de incrementare a fost supra?nc?rcat ?n clasa fractie_rationala.

?n mod analog putem defini ?n clasa fractie_rationala operatorii de conversie, dup? necesitate, ?i pentru alte tipuri de date standard.
_________________________
Autorul: dr.conf. S. Pereteatcu

рассказать друзьям и получить подарок

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

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Translate Переводчик

Подписка на новости

SmartResponder.ru
Ваш e-mail: *
Ваше имя: *

Хостинг для Wordpress сайтов