Лекция 1" Предмет и основные понятия информатики" Лекция 2 "Системы исчисления" Лекция 3 "Архитектура вычислительной системы. Классификация компьютеров" Лекция 4 "Персональный компьютер: системная плата" Лекция 5 "Персональный компьютер: внешняя память" Лекция 6 "Персональный компьютер: стандартные устройства ввода-вывода" Лекция 7 "Персональный компьютер: периферийные устройства ввода-вывода" Лекция 8 " Программное обеспечение" Лекция 9 "Сжатие данных" Лекция 10 "Компьютерные вирусы"
1. Два подхода к передаче аргументов
2. Как С++ передает аргументы в функции по умолчанию
3. Как с помощью указателя создается вызов по ссылке
4. Передача ссылки в функции
5. Перегрузка функций
6. Шаблоны функций
7. Рекурсивные функций
Мы начнем с рассмотрения двух способов передачи в функции аргументов и с того, какие возможности возникают при их применении. Понимание механизма передачи аргументов необходимо для освоения понятия ссылки.
В принципе в компьютерном языке существуют два способа передачи подпрограмме аргумента. Первый называется передачей по значению (или вызовом по значению). Он заключается в копировании значения аргумента в параметр подпрограммы. Очевидно, что в этом случае, если подпрограмма изменит свои параметры, это никак не повлияет на аргументы, с которыми она вызывалась.
Передача по ссылке (или вызов по ссылке) является вторым способом передачи аргументов подпрограмме. В этом случае в параметр копируется адрес аргумента (не его значение). Внутри подпрограммы этот адрес используется для обращения к фактическому аргументу, указанному в вызове. Это значит, что изменения параметра повлияют на аргумент, использованный при вызове подпрограммы.
7.2. Как С++ передает аргументы по умолчанию
По умолчанию С++ использует при вызове функции передачу аргументов по значению. Это значит, что код внутри функции не может изменить аргументы, указанные при ее вызове. В этой книге все программы до сих пор использовали метод передачи по значению. Рассмотрим в качестве примера функцию reciprocal() в приведенной ниже программе:
/* Изменение переданного по значению параметра не изменяет аргумент. */
#include <iostream>
using namespace std;
double reciprocal(double x);
int main () {
double t = 10.0;
cout << "Обратное значение от 10.0 составляет " <<
reciprocal (t) << "\n";
cout << "Значение t все еще равно: " << t << "\n";
return 0 ;
}
// Возврат обратного значения,
double reciprocal(double x)
{
x = 1 / x; // создадим обратное значение
return x;
}
Вывод этой программы выглядит следующим образом:
Обратное значение от 10.0 составляет 0.1
Значение t все еще равно: 10
Как видно из вывода программы, когда внутри reciprocal() выполняется присваивание
x = 1/х;
единственное, что изменяется — это локальная переменная х. Переменная t, использованная как аргумент, будет все еще иметь значение 10; операции внутри функции никак на нее не повлияют.