Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб 7_Подробнее о функциях.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
289 Кб
Скачать
☆

2. Пример передачи аргументов по ссылке

Для того чтобы аргумент передавался не по значению, а по ссылке, перед именем соответствующего аргумента необходимо указать оператор &. В листинге 7.2 приведен практически тот же программный код, что и в листинге 7.1, однако аргумент функции incr () в этом случае передается по ссылке.

Листинг 7.2. Передача аргумента по ссылке

// demoRef.cpp : Defines the entry point for the console application.

//

#include "stdafx.h"

#include <iostream>

using namespace std;

//Аргумент передается по ссылке:

int incr (int &m);

int main()

{

int n=5;

cout << "n =" << incr (n) << endl;

cout << "n =" << n << endl;

cin >> n;

return 0;

}

int incr (int &m)

{

m=m+1;

return m;

}

3. Пример передачи аргументов по ссылке и по значению одновременно

Если у функции несколько аргументов, часть из них (или все) могут переда­ваться по ссылке, а часть - по значению. Пример приведен в листинге 7.3.

Листинг 7.3. Передача аргумента по ссылке и по значению

// demoVarRef.cpp : Defines the entry point for the console application.

//

#include "stdafx.h"

#include <iostream>

using namespace std;

//Прототип функции

//Аргумент передается по ссылке и по значению:

void change(int &m, int n);

int main()

{

int m = 3, n = 5;

change(m,n);

cout << "m = " << m << endl;

cout << "n = " << n << endl;

cin >> n;

return 0;

}

//Определение функции

//Аргумент передается по ссылке и по значению:

void change(int &m, int n)

{

int k;

k=n;

n=m;

m=k;

cout << "m = " << m << endl;

cout << "n = " << n << endl;

}

В результате выполнения программы на экране появятся следующие строки:

m =5

n =3

m =5

n =5

У функции change () два целочисленных аргумента: первый передается по ссылке, а второй передается по значению. Действие функции состоит в том, что значения аргументов меняются местами: первому аргументу при­сваивается значение второго аргумента и наоборот. Но поскольку по ссылке передается только первый аргумент, то изменяется значение только этого аргумента - второй остается неизменным.

Обращаем внимание читателя на то, что наличие оператора & перед именем аргумента - всего лишь инструкция для определения механизма передачи аргумента. Это не влияет на способ обращения к аргументу или использова­ния аргумента в теле функции.

7.2. Перегрузка функций

В С++ две или даже несколько функций могут иметь одно и то же имя при условии, что различаются объявления их параметров. Такие функции называются перегруженными, а само это средство называют перегрузкой функций. Перегрузка функций является одним из способов реализации полиморфизма в С++.

Для того, чтобы перегрузить функцию, достаточно объявить другой вариант функции с тем же именем. Компилятор возьмет на себя все остальное. Вы только должны соблюсти одно важное условие: типы или число параметров (или и то, и другое) каждой из перегруженных функций должны различаться. Для перегруженных функций недостаточно различия только в типе возвращаемых значений. Они должны различаться типом или числом их параметров. Разумеется, перегруженные функции могут различаться также и типами возвращаемых значений. Когда вызывается перегруженная функция, реально выполняется тот вариант, у которого параметры соответствуют аргументам вызова.