Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
c++ 2.0.docx
Скачиваний:
4
Добавлен:
25.09.2019
Размер:
77.41 Кб
Скачать

25) Передача параметров по значению и по адресу.

Передача параметра возможна по значению и по ссылке. Иногда также используют выражение «передача параметра по адресу». Ниже приведён пример, иллюстрирующий различия этих способов.

Передача параметра по значению Передача параметра по значению означает что вызывающая функция копирует в память, доступную вызываемой, (обычно стек) непосредственное значение. Изменение копии переменной, соответственно, оригинал не затрагивает.

Передача параметра по адресу Если необходимо именно изменить переменную из внешней, по отношению к вызываемой функции, области видимости, можно копировать адрес переменной, подлежащей изменению. Соответственно при вызове функции g(&x) приходится использовать операцию взятия адреса. Эта техническая деталь отвлекает внимание программиста от логики прикладной программы, однако в случаях невозможности передачи по ссылке может оказаться единственным решением.

Можно заметить, что передача параметра по адресу является частным случаем передачи по значению: передаваемым значением является адрес, по которому можно найти другое значение — значение переменной x. Передача параметра по ссылке Передача параметра по ссылке означает что копируется не само значение, а адрес исходной переменной (как в случае передачи параметра по адресу), однако синтаксис используется такой, чтобы программисту не приходилось использовать операцию разыменования и он мог иметь дело непосредственно со значением, хранящимся по этому адресу (как в случае передачи параметра по значению). Передача по ссылке позволяет избежать копирования всей информации, описывающей состояние объекта (а это может быть существенно больше чем sizeof(int)) и является необходимой для конструктора копирования. Если функция возвращает значение по ссылке (например, в виде «return *this;»), то её вызов можно использовать слева от оператора присваивания (смотри также L-выражение). В случае если передача по ссылке используется именно как средство увеличения быстродействия, но изменение параметра нежелательно, можно использовать передачу по ссылке константного объекта. Таким образом можно ожидать, что примерная программа напечатает (если закоментировать ошибочную строку) «0010 022 233 333».

Пример на языке С++:

#include <iostream>

using namespace std; // для использования cout

void f(int x)

{

// передача параметра по значению

cout << x;

x = 1;

cout << x;

}

void g(int* x)

{

// передача параметра по адресу

cout << *x;

*x = 2;

cout << *x;

}

void h(int& x)

{

// передача параметра по ссылке

cout << x;

x = 3;

cout << x;

}

void i(const int& x)

{

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

cout << x;

x = 4; //Ошибка из-за которой код не будет скомпилирован

cout << x;

}

int main()

{

int x = 0;

cout << x;

f(x);

cout<< x << " ";

g(&x);

cout << x << " ";

h(x);

cout << x << " ";

i(x);

cout << x;

return 0;}

26)DELPHI nenado

27) Передача массивов в качестве параметров.

28) DELPHI nenado

29) Параметры со значениями по умолчанию.

C++ позволяет программам указывать для параметров значения по умолчанию. Значения по умолчанию для параметров указываются в заголовке функции при ее определении. Если вызов функции опускает значения одного или нескольких параметров, C++ будет использовать значения по умолчанию. Если вызов функции опускает значение определенного параметра, то должны быть опущены и значения всех последующих параметров.Обеспечение значений по умолчанию для параметров упрощает возможность повторного использования функций (их использования несколькими программами).

ОПРЕДЕЛЕНИЕ ЗНАЧЕНИЙ ПО УМОЛЧАНИЮ

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

void some_function(int size=12, float cost=19.95) //---->Значения по умолчанию

{

// Операторы функции

}

Следующая программа DEFAULTS. CPP присваивает значения по умолчанию параметрам a, b и c внутри функции show_parameters. Затем программа четыре раза вызывает эту функцию, сначала не указывая параметров вообще, затем указывая значение только для а, потом значения для а и b и, наконец, указывая значения для всех трех параметров:

#include <iostream.h>

void show__parameters (int a=1, int b=2, int c=3)

{

cout << "a" << a << " b " << b << " с " << с << endl;

}

void main(void)

{

show_parameters();

show_parameters(1001);

show_parameters(1001, 2002);

show_parameters(1001, 2002, 3003);

}

Когда вы откомпилируете и запустите эту программу, на вашем экране появится следующий вывод:

С:\> DEFAULTS <ENTER>

а 1 b 2 с 3

а 1001 b 2 с 3

а 1001 b 2002 с 3

а 1001 b 2002 с 3003

Как видите, если необходимо, функция использует значения параметров по умолчанию.

Правила для пропуска значений параметров

Если программа опускает определенный параметр для функции, обеспечивающей значения по умолчанию, то следует опустить и все последующие параметры. Другими словами, вы не можете опускать средний параметр. В случае предыдущей программы, если требовалось опустить значение параметра b в show_parameters, программа также должна была опустить значение параметра с. Вы не можете указать значение для а и с, опуская значение Ь.

Задание значений по умолчанию

Когда вы определяете функцию, C++ позволяет вам указать значения по умолчанию для одного или нескольких параметров. Если программа в дальнейших вызовах этой функции опускает один или несколько параметров, то функция будет использовать для них значения по умолчанию. Чтобы присвоить параметру значение по умолчанию, просто используйте оператор присваивания внутри определения функции. Когда программа опускает один параметр, она должна опускать все последующие параметры.

ЧТО ВАМ НЕОБХОДИМО ЗНАТЬ Из данного урока вы узнали, что C++ позволяет вам указывать значения по умолчанию для параметров функции. Если программа опускает один или несколько параметров, функция использует значения по умолчанию. В следующих уроках, когда ваши программы начнут использовать объектно-ориентированное программирование на C++, вы будете применять параметры по умолчанию для инициализации различных переменных класса. Как вы уже знаете, переменная позволяет вам хранить значение определенного типа ( int, float и. т. д). В уроке 16 вы освоите, как хранить несколько значений одного и того же типа внутри массива. Например, ваша программа может хранить тестовые очки для 100 студентов или стоимость 50 акций. С помощью массивов хранить и использовать такие значения очень легко. До изучения урока 16 убедитесь, что вы освоили следующие основные концепции:

Чтобы присвоить значения по умолчанию параметрам функции, используйте оператор присваивания C++ непосредственно в определении функции. Если программа опускает значения параметров при вызове функции, функция использует значения по умолчанию. Если программа опускает значение одного параметра, она должна опустить значения для всех последующих параметров; программа не может опускать средний параметр. Указывая параметры по умолчанию, вы тем самым облегчаете использование ваших функций, в том числе и для других программ.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]