previous next Up Title Contents Index

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

Tehtävä 18.162 Useita versioita += operaattorista

Kirjoita em. versiot reaaliluvun ja kokonaisluvun lisäämiseksi tuotteeseen.


previous next Up Title Contents Index