Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys

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.158 Useita versioita += operaattorista

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

Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys