#include using namespace std; void unchangingFunc(int passedVar) { passedVar = 5; // Значение меняется только внутри функции cout << "Новое значение passedVar внутри unchangingFunc: " << passedVar << endl; } void swap(int &num1, int &num2) { /** & перед именем в списке аргументов означет, что передастся ссылка на память, с которой можно работать как со значением (обратное преобразование не нужно) */ int temp; temp = num1; num1 = num2; num2 = temp; } void add_lists( int first[], int second[], int total[], int length ) { /** При передаче массива значения в изначальном массиве также меняются Это поведение можно предотвратить используя const: void add_lists( const int first[], const int second[], int total[], int length ) При таком объявлении, попытка изменить значения первых двух массивов внутри функции вызовет ошибку */ for( int i = 0; i < length; i++ ) { total[i] = first[i] + second[i]; }; } /* Перегрузка функций позволяет создать несколько функций с одинаковыми именами, но разными параметрами или количеством параметров */ void my_func(int first_arg) { cout << "My func called with one int argument" << endl; } void my_func(double first_arg) { cout << "My func called with one double argument" << endl; } void my_func(int first_arg, int second_arg) { cout << "My func called with two int arguments" << endl; } int main() { int myVar = 3; unchangingFunc(myVar); // Внутри main значение myVar остаётся таким же cout << "Новое значение myVar после unchangingFunc: " << myVar << endl; int myOtherVar = 9; // При вызове функции, принимающей ссылки, дополнительные преобразования не нужны swap(myVar, myOtherVar); cout << "После смены мест значение myVar=" << myVar << ", myOtherVar=" << myOtherVar << endl; // Вызов перегруженный функций my_func(4); my_func(double(4)); my_func(3, 5); return 0; }