18.1 operator+=
Tuote oli sellainen, että siihen lisättiin aina saman tuotteen
yhteensä- tiedot:
tuotteet[i] += tuote;
yhteensa += tuote;
Sama voitaisiin tehdä kutsulla
tuotteet[i].ynnaa(tuote);
yhteensa.ynnaa(tuote);
Osittain on makuasia kummalla tavalla lisääminen tehdään.
+= - operaattorin käyttö on tullut mahdolliseksi, koska
luokassa cTuote on esitelty miten operaattorin on
käyttäydyttävä jos luokan olioon halutaan lisätä
toinen saman luokan olio:
cTuote &operator+=(const cTuote &tuote) { ynnaa(tuote); return *this; }
Operaattori on laitettu palauttamaan saman luokan olio, koska joskus voidaan
haluta C:mäistä ketjusijoitusta:
tuote3 = tuote2 += tuote1;
Toisaalta ketjusijoitus ei ole aina selvin mahdollinen tapa tehdä asioita,
samahan voitaisiin tehdä
tuote2 += tuote1; tuote3 = tuote2;
joten myös operaattori += voitaisiin suhteellisen
hyvällä omalla tunnolla määritellä myös (luokassa
cTuote)
void operator+=(const cTuote &tuote) { ynnaa(tuote); }
Oikeasti operaattoria kutsuttaisiin:
tuote2.operator+=(tuote1);
// vrt:
tuote2.ynnaa(tuote1);
mutta operaattori käsitellään erikoistapauksena ja em. kutsu
voidaan kirjoittaa lyhyemmässä muodossa
tuote2 += tuote1;
Huomattakoon että samasta operaattorista voi olla useita eri versiota
riippuen siitä mitä lisätään. Eli voisi olla
esimeriksi:
tuote2 += 2000.0; // lisätään reaaliluku hintaan;
tuote2 += 5; // lisätään kokonaisluku kappalemäärään
- Kirjoita em. versiot reaaliluvun ja kokonaisluvun lisäämiseksi
tuotteeseen.