Лекция: Параметры по умолчанию

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

Пример 6. Дана функция

void fun6 (float f, char ch='*', int i=2)

{ cout<<endl<<f<<" "<<ch<<" "<< i; }

Приведём несколько вариантов её вызова.

main() { fun6 (2.5, ‘-‘, 11); /* f=2.5, ch=’-‘, i=11 */

fun6 (2.5, 196); /* f=2.5, ch — символ с кодом 196 (‘-‘), i=2 по умолчанию. */

fun6 (196); /* f=196 как вещественное, сh=’*’ и i=2 по умолчанию. */

fun6 (0.01, ‘*’, 33); /* f=0.01, ch=’*’, i=33; */ getch(); }

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

1) значение по умолчанию может быть задано либо в прототипе, либо при описании функции, но только в одном месте один раз;

2) в качестве умалчиваемых значений должны быть либо константы, либо глобальные переменные;

3) умалчиваемые параметры должны быть последними в списке;

4) если при вызове функции опустили аргумент для параметра по умолчанию, то не надо писать аргументы и для всех оставшихся в списке. Например, если для функции fun6 надо изменить iна 196,то fun6 (0.11, 196); компилируется из-за совместимости целого и символьного типов, но неправильно выполняется, так как i останется по умолчанию, а fun6(0.11,, 196); не компилируется. Правильным будет такой вызов: fun6(0.11, ’*’, 196);, в котором второй параметр (’*’) записываем, несмотря на то, что это умалчиваемое значение.

Рекомендуется упорядочить умалчиваемые параметры по частоте их изменения.

Пример 7. Пусть вещественный параметр f1 меняется почти при каждом вызове. Из остальных трёх параметров вещественный параметр f2 меняется чаще, чем символ, а вероятность изменения целого параметра наименьшая. Тогда задаём следующий порядок параметров:

int test=2;

void Out7 ( float f1, float f2=1.1,char c3='*', int p4=test )

{ textcolor(11); cprintf("%f %f %c %d\n\r", f1, f2, c3, p4); }

int main() { Out7(11); Out7(11,2.2); Out7(11,2.2, 65);

int q1=11; Out7(q1, 'A' ,196 ,9);

getch(); return 0; }

В качестве умалчиваемого значения для целого p4 задали значение глобальной переменной, а не константы, как для других параметров. Целое число q1 и символ'A' можно передать вместо вещественных f1 и f2. Будет выведено 11.000000 и код символа 'A', то есть целое число, преобразованное в вещественное: 65.000000.

Упражнение. Определить остальные результаты вызова функции Out7.

 

еще рефераты
Еще работы по информатике