С++ ссылочный параметр &, значок & перед именем параметра в объявлении функции
Тэги: язык С основы язык С ссылочный параметр
📅26-10-2018 👁515
Ссылочный параметравтоматически получает адрес соответствующего аргумента.
#include <iostream>
using namespace std;
void f (int &i); // в переменную i придет ссылка на переменную, которую мы вызовем в качестве аргумента
int main ()
{
int k = 0;
f(k); // передаем в функцию АДРЕС переменной К
cout << k; // 20
return 0;
}
void f (int &i){
cout << &i << '\n'; // покажет адрес переменной напр.: 0x28ff0c
cout << i; // покажет значение переменной
i = 20; // присвоит переменной К НОВОЕ значение 20 !!!
}
Как видим, мы не пишем, что k = f(); мы не присваиваем К новое значение, мы в ее адрес передаем новое значение в функции.
Присваивая некоторое значение по ссылке, вы в действительности присваиваете это значение переменной, на которую указывает эта ссылка!! Поэтому применяя ссылку в качестве аргумента функции, при вызове функции вы в действительности ИСПОЛЬЗУЕТЕ ТАКУЮ ПЕРЕМЕННУЮ!
Например:
#include <iostream>
using namespace std;
void disp_binary (unsigned u);
enum resolution {low, medium, high};
class display {
int width,height;
resolution res;
public:
void set_dim(int w, int h) {width = w; height = h; }
void get_dim(int &w, int &h) {w = width; h = height;}
void set_res(resolution r) {res = r;}
resolution get_res() {return res;}
};
char names[3][68] = {"low","middle","high"};
int main (){
display display_mode[3];
int i, w, h;
display_mode[0].set_res(low);display_mode[0].set_dim(640, 480);
display_mode[1].set_res(medium);display_mode[1].set_dim(800, 600);
display_mode[2].set_res(high);display_mode[2].set_dim(1600, 1200);
cout<< "Video modes:\n\n";
for(i=0; i<3; i++) {
cout << names[display_mode[i].get_res()];
display_mode[i].get_dim(w,h);
cout << ' ' << w << " x " << h << '\n';
}
return 0;
}
Здесь мы используем ссылочный параметр для получения ширины и высоты void get_dim(int &w, int &h) {w = width; h = height;}
Мы используем оператор & чтобы получить доступ к переменным которые получают новое значение в функции.
ТО ЕСТЬ МЫ ПЕРЕДАЕМ АДРЕС НАШИХ ДВУХ ПЕРЕМЕННЫХ w и h в функцию и получаем их значения.
Мы могли бы и без них вывести ширину и высоту, напрямую их используя: display_mode[i].width;
Так как мы с помощью display_mode[i].get_dim(w,h); не пишем явно присвоение к переменным w и h, однако с помощью операторa & мы получаем значения этих переменных.
Расширенно это выглядело бы так:
В объявлении класса мы пишем эту функцию как: int get_dim() {return width;}
И вызываем ее таким образом: w = display_mode[i].get_dim();
Тоже самое и для высоты. То есть код будет больше.
При помощи ссылочных параметров код сокращается.
Оставить свой ответ: