Параметр по умолчанию

Формат определения константного параметра

Имя типа имя параметра = значение

Параметры по умолчанию должны находиться в конце списка формальных параметров. Если используется значение по умолчанию, то в вызове соответствующий фактический параметр не указывается.

Устанавливает значение параметра в значение указанное по умолчанию, или заменяет на значение соответствующего фактического параметра.

Пример 5. Параметр по умолчанию и вызовы функции, имеющей параметр по умолчанию

void ex2(int &a, int b=10, int c=2)

{

a= c+b;

}

int _tmain(int argc, _TCHAR* argv[])

 

{

int b,a;

//вызов без определения двух параметров

ex2(a);

printf("a=%d",a);

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

ex2(a,100);

printf("a=%d",a);

//вызов с определением значений двух параметров по умолчанию

ex2(a,1,1);

printf("a=%d",a);

}

 

Параметр функция

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

Пример 6. Передача функции в качестве параметра

typedef int(*TFunc)(int x); // имя типа TFunc определяет функцию

//определения функций для передачи в качесве параметра

int step2(int x)

{

return 1;

}

 

int step5(int x)

{

return 1;

}

int simple(int x)

{

return 1;

}

 

//функция реализует алгоритм определения количества элементов, //последовательности, которые удовлетворяют условию, реализумому переданной //функцией

int count(int n, TFunc f) //f парамер, который принимает функцию

{

int i, c=0,x;

for (i=1; i<=n;i++)

{

scanf("%d", &x);

if (f(x)) c++;

}

return c;

}

void select_func(int n) //выбор передаваемой функции

{

printf("Выберите функцию");

scanf("%d",&p);

switch(p)

{

case 1: cout<<count(3,step2);

case 2: cout<<count(3,step5);

case 3: cout<<count(3,simple);

}

}

Фактическим параметром, соответствующим функциональному параметру, должно быть имя подпрограммы того типа, что и параметр.

 

Способы передачи параметров

Три способа: по значению; по адресу, по ссылке.

Передача по значению

Осуществляется только через параметры значения. В этом случае в стеке создается копия фактического параметра – выделяется память и в нее записывается значение фактического параметра. При изменении в подпрограмме значения формального параметра, значение фактического не изменяется. (Пример 1).

Передача по адресу

Осуществляется через параметр указатель. При такой передаче передается адрес переменной. Если передается переменная параметру указателю, то изменяется значение переданной переменной. Если переменная передается константному параметру, то значение переданной переменной не будет изменено.(Пример 2)

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

Передача по ссылке

Осуществляется через параметр ссылку. При такой передаче передается переменная. При такой передаче изменяется значение переданной переменной, т.е. значение в ее ячейке памяти. (Примеры: 3, 4,5)

 

Правила использования механизма параметров

1. Количество формальных и фактических параметров должно быть одинаковым (исключение параметры по умолчанию).

2. Фактические параметры в списке должны перечисляться в том же порядке, что и формальные.

3. Между соответствующими фактическим и формальным параметрами должно устанавливаться соответствие по типу. Они должны быть совместимые или эквивалентные.

4. При передаче структур данных соответствующие параметры должны быть эквивалентны.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow