Sunteți pe pagina 1din 4

Supraîncărcare operator cast și operator>

(tip) expresie – forma explicită, dar se aplică și implicit, în funcție de context

– sens originar: forțează conversii intre tipurile de date


– sens la supraincarcare:
• conversii între obiecte și tipurile de bază
• conversii intre obiecte de clase diferite

– implementari curente pentru adaptarea apelurilor la un prototip existent de funcție

– clasa poate contine mai multe supraincarcari ale operator tip_data (), ce diferă prin
signatura

– recunoaștere operator cast după sintaxa specifică:


• tipul returnat face parte din numele operatorului, nu-l precede!

– Atenție: se aplică și implicit și trebuie văzut dacă este bine să se aplice


Supraîncărcare operator cast și operator>
class Stud
{
public:
string nume; double media;
Stud(const char *n = "Anonim ", double m = 0.) : media(m), nume(n) { }
operator double() { return media; }
};

bool operator>(Stud & s1, Stud &s2)


{ return (double) s1 > (double) s2; } // cast explicit

void main()
{
Stud s1("Popa Ion ", 8.50), s2("Popa Elena", 8.70 );
Stud s3("Adamescu Virgil", 7.50);
cout << "\n" << s3.nume << " are " << (double)s3; // cast explicit
cout << "\nFamilia " << s1.nume << " are media "
<< (s1 + s2)/2. << " !"; // cast implicit
cout << "\n" << s1.nume << "este mai bun decat "<<s2.nume << "? => „
<< (s1>s2); // operator>
}
Supraîncărcare operator cast și operator>

– daca exista si supraincarcarea operator+ ce se aplica pentru


(s1 + s2)/2. ?
– cast se aplică doar in ultima etapă de identificare a funcției
(operatorului) de apelat
– Dezvoltări posibile:
▪ operator+ (pentru adunare de medii)
▪ Operator+= (pentru mărirea mediei cu o valoare dată)
Supraîncărcare operator cast: conversie intre obiecte de clase diferite
class DST; // anunt formal
class SRC
{
public:
int x;
operator DST() ; // cast in sursa
{ cout << "\nDST cast"; return DST(x); }
};
class DST
{
int y;
public:
DST(int n = 0) :y(n) { }
explicit DST(SRC);
// constructor in destinatie
};

DST::DST(SRC os) : y(os.x) { cout << "\nDST cons"; }


SRC:: operator DST()
{ cout << "\nDST cast"; return DST(x); }

S-ar putea să vă placă și