Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys

8.5.5 Viitemuuttujat (referenssimuuttujat, &)

C++ tarjoaa vielä oman uuden tavan välittää muuttuvia parametrejä: viitemuuttujat, eli referenssimuuttujat ( reference). Varsinainen mekanismi on täsmälleen sama kuin parametrin välittäminen osoitteiden avullakin. Vain syntaksi on erilainen - aloittelijalle jopa helpompi käyttää:

Aliohjelma olisi muotoa:

c-muut\matka_ar.cpp - parametri referenssinä

	void kysy_matka(int &rMatka_mm) 
	{
	  int mm;
	  cout << "Anna matka millimetreinä>";
	  cin >> mm;
	  rMatka_mm = mm;
	}

tai lyhyemmässä muodossa:

	void kysy_matka(int &rMatka_mm)
	{
	  cout << "Anna matka millimetreinä>";
	  cin >> rMatka_mm;
	}

Tässä esittelyllä

	int &rMatka_mm

esitellään referenssimuuttuja rMatka_mm, eli muuttuja joka referoi johonkin toiseen muuttujaan aina kun siihen viitataan. Näin sijoitus

	rMatka_mm = mm;

tarkoittaakin, että tulos sijoitetaan kutsuneen ohjelman vastaavalle muuttujalle.

Huonona (tai jonkin mielestä hyvänä) puolena viitemuuttujista voitaisiin pitää sitä, että itse kutsu pääohjelmasta täytyy nyt olla muodossa:

	kysy_matka(matka_mm);                 // HUOM!

Miksi pitäisin tätä huonona? Siksi, ettei kutsusta nyt näe suoran aikooko aliohjelma muuttaa muuttujan matka_mm arvoa vaiko ei.

Hyvänä puolena on taas se, että aliohjelma voidaan muuttaa viitteitä käyttäväksi muuttamatta itse kutsuvaa ohjelmaa. Tämä tulee kyseeseen sitten kun välitämme parametreinä "isoja" oliota, jolloin on edullisempaa vain viitata olioon, kuin kuljettaa mukana koko olio.

Vielä yksi huono (tai joidenkin mielestä hyvä) puoli viitemuuttujissa on se, ettei niiden viittaamaa paikkaa voida muuttaa muuta kuin alustuksessa (esim. aliohjelman kutsun yhteydessä). Näin osoittimia tarvitaan vielä tilanteissa, joissa tietorakenteita pitää käydä läpi.


Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys