Referenties

Een referentie is niks anders dan een "bijnaam" voor een variabele. Je hebt een variabele gemaakt (int x) waar je vervolgens een referentie van maakt (int y). Wat er nu gebeurt is dat x, y is en y, x is, wat ik wil zeggen is als je iets met y doet doe je dat ook met x en omgekeerd. Misschien moeilijk te begrijpen als ik het zo uit leg maar met een voorbeeldje komt dat wel goed.

int main()
{
  int x = 5; 
  int &ref = x;    //ref is de referentie van x
  
  cout << x;
  cout << ref; 
  
  ref = 10;
  
  cout << x;
  cout << ref;
  cout << &x;
  cout << &ref;
  
  return 0;
}
In dit voorbeeld wordt in regel 2 "ref" de referentie gemaakt van x en is "ref" dus in alle opzichten gelijk aan x. Bij de eerste 2 regels uitvoer komt dan ook de waarde 5 te staan waarna we ref 10 maken en x dus ook 10 wordt. Als we dan dus weer de waarde van x en ref gaan bekijken blijken ze beiden 10 te zijn. Als we nu het geheugenadres gaan opvragen van x en ref blijkt dat ook de geheugenadressen gelijk zijn. Het komt er dus op neer dat ref precies hetzelfde is als x in elk opzicht.

Je begrijpt nu misschien wel dat je in plaats van pointers ook referenties kunt gebruiken om data te manipuleren. Hieronder zal ik nog even een voorbeeld neerzetten om je het nut van referenties duidelijk te maken en het verschil met pointers te laten zien.


void swap(int *x, int *y)
{
  int temp= *x;
  *x = *y;
  *y = temp;
}

int main()
{
  int x = 10, y = 5;
  
  cout << x \n;
  cout << y \n;
  
  swap(&x, &y);
  
  cout << x \n;
  cout << y \n;
  
  return = 0;
}
Zoals je ziet worden hier 2 waarden omgewisseld door gebruik te maken van pointers. In main worden eerst 2 variabelen gemaakt waarvan de waarde door cout op het scherm wordt gezet (10 en 5). Vervolgens wordt het geheugen adres van x en y doorgegeven aan de functie swap die de waarden van x en y omwisselt. De nieuwe waarden laten we op het laatst nog een keer zien om te controleren of de waarden zijn gewisselt (5 en 10).

Nu gaan we hetzelfde nog een keer doen maar dan met referenties.


void swap(int &x, int &y)
{
  int temp= x;
  x = y;
  y = temp;
}

int main()
{
  int x = 10, y = 5;
  
  cout << x \n;
  cout << y \n;
  
  swap(x, y);
  
  cout << x \n;
  cout << y \n;
  
  return = 0;
}
Als het goed is moet hier dus hetzelfde uitkomen als het vorige voorbeeld maar nu met referenties. De functie swap ontvangt nu gewoon x en y waaraan dus gerefereerd gaat worden in swap (zie de swap functie). Vervolgens wordt de waarde in swap verwisselt. Je ziet dat dit een stuk duidelijker werkt dan met pointers.

Succes

Vampire,