CPP-101: Промеливи и аритметика

Препратки (references)

Препратката (reference) е алтернативно име на обекта. Поради това често препратките се наричат {\em псeвдоними}. За даден тип T, типът на препратка към обекти от този тип се обозначава с T&. Например:

int i=1;
int& r=i;
r=2;

В ред 2 е дефинирана препратка към променливата i. Когато в ред 3 на препратката r се присвоява нова стойност, тази операция в действителност се извършва с променливата i, към която
препраща r.

При дефиниране на препратка, тя задължително трябва да бъде инициализира с обект от съответния тип. Да разгледаме следния фрагмент:

int& r1;  //грешка!
int& r2=10;  //грешка!

В ред 1 е допусната грешка, тъй като липсва инициализация на препратката r. В ред 2 инициализацията е неправилна, тъй като препратката не е инициализирана с променлива от типа int.

Веднъж дефинирана препратката не може да се пренасочи към друг обект. Точно поради тази причина при дефинирането и е задължително тя да бъде инициализирана. В следващия фрагмент:

int i=1;
int& r=i;
int i2=2;
r=i2;

операцията, която се изпълнява в ред 4 не пренасочва препратката към i2, а присвоява нова стойност на i.

Всички операции, които се извършват върху препратката, в действителност се извършват върху обекта, към който е насочена препратката. Така например:

int i=0;
int& r=i;
r++;
int* p=&r;

В ред 3 операцията се извършва върху променливата i и тя се увеличава с единица. Взимането на адрес от препратка в ред 4 всъщност води до взимането на адреса на променливата i.

Препратките най-често се използват като формални аргументи на функции в случай, че функцията трябва да е в състояние да променя стойността на предадения обект. Например:

void plus2(int& v) {
    v+=2;
}
...
int main() {
    int x=1;
    plus2(x);
    ...
}

Функцията, дефинирана в ред 1 има за аргумент препратка. Това означава, че при предаване на действителния аргумент ще се създаде препратка към него, и в тялото на функцията ще се работи с препратка към действителния аргумент. Следователно след изпълнението на ред 7, стойността на променливата x ще бъде 3.

Публикувано в CPP-101, ООП с етикети , , . Постоянна връзка.

Един коментар по CPP-101: Промеливи и аритметика

  1. Pingback: CPP-101: Кратък обзор на езика за програмиране C++ | Записки по програмиране

Коментарите са затворени.