This repository has been archived on 2023-05-13. You can view files and clone it, but cannot push or open issues or pull requests.
mipt_cpp/seminar01_overload/classroom_tasks/code/01ref/07func_ref.cpp
2022-09-01 16:37:41 +03:00

69 lines
No EOL
3 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <iostream>
using std::cout, std::endl;
/*
В 90% случаях ссылки используются для того чтобы передать что либо в функцию
Часто нам хочется передать переменную в функцию и изменить её там (внутри функции)
Это можно делать и с помощью указателей, но с помощью ссылок это делать гораздо удобней
Рассмотрим два эквивалентных участка кода:
Передаём по указателю: Передаём по ссылке:
void sqr(int* p) void sqr(int& r)
{ {
*p = *p * *p; r = r * r;
} }
int main() int main()
{ {
int a = 5; int a = 5;
sqr(&a); sqr(a);
cout << a << endl; cout << a << endl;
} }
Обратите внимание на 2 вещи:
1) Ссылку не нужно разыменовывать внутри функции, это происходит автоматически
2) При передаче в функцию, не нужно передавать адрес переменной
Нужно передать саму переменную, компилятор сам вычислит её адрес
При этом копирования объекта a в функцию не происходит,
ссылки работают также быстро как и указатели
*/
void sqr(int& r)
{
r = r * r;
}
int main()
{
int a = 5;
sqr(a);
cout << a << endl;
}
/*
Задачи:
1) Напишите функцию void inc(int& x), которая должна принимать объект типа int
и увеличивать его на 1
Вызовите эту функцию из main и протестируйте её работу
2) Напишите функцию void normalize(float& x, float& y), которая должна принимать
2 объекта типа float и нормализировать их. То есть делить их на некоторое число,
так чтобы было x*x + y*y == 1
Для этого x и y нужно разделить на sqrt(x*x + y*y)
3) Можно ли передать в функцию sqr не переменную, а число?
То есть, можно ли написать так:
sqr(5)
*/