18.4 Tyypinmuunnosoperaattori ja sijoitus
Esimerkin rajoit.cpp toinen +- operaattori voitaisiin
välttää tekemällä muunnosoperaattori, joka muuttaa
cRajoitettu - tyyppisen olion kokonaisluvuksi:
class cRajoitettu {
...
operator int() { return arvo; }
};
Tällöin yhteenlaskussa
i = 20 + m2;
m2 ensin muuttuu kokonaisluvuksi ja sitten normaali kokonaislukujen
yhteenlasku huolehtii lopusta. Muoto
m1 = 20 + m2;
saataisiin toimimaan määrittelemällä sijoitusoperaattori:
class cRajoitettu {
...
cRajoitettu &operator=(int i) { aseta(i); return *this; }
};
Tällöin sijoituslauseen oikea puoli lasketaan kokonaislukuna ja
sitten tämä kokonaisluku sijoitetaan em. sijoitusoperaattorilla.
Sijoitusoperaattorin tulee palauttaa sijoituksen kohteena olevan luokan
tyyppinen tulos, jotta ketjusijoitus
m1 = m2 = 20;
olisi mahdollinen.
- Aikaisemmin oli esitetty cAika- luokka. Lisää luokkaan
+= - operaattori ja + - operaattori joiden ansiosta seuraavat
sijoitukset olisivat mahdollisia
cAika a1(10,30),a2(15,55);
a1 += 50;
a2 = a1 + 20;
- Miten voisit tehdä luokan cAika
käyttämällä edellä ollutta cRajoitettu-
luokkaa. Tarvitseeko cRajoitettu joitakin muutoksia?