Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка ООП.doc
Скачиваний:
23
Добавлен:
08.11.2018
Размер:
1.4 Mб
Скачать
  1. Параметры по умолчанию

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

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

Например:

Function Test(t: double; g: double = 9.8): double; ...

Test(100,2.5);//явно передаются оба параметра Test(100); //явно передается только один параметр t, //параметр g будет равен 9.8

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

Function Test(x: double = 100; y: double): double;

Если по умолчанию объявлены несколько параметров, то мы не можем упустить только первый из них. Упускать параметры надо начиная с последнего.

Например:

Function SomeFinc(a: integer = 1; b: integer = 2, с: integer = 3): integer; begin Result := a + b + с; end;

procedure Test; var x: integer; begin x := SomeFinc; //будет возвращено 1+2+3 x := SomeFinc (10); //будет возвращено 10+2+3 x := SomeFinc (10,20); //будет возвращено 10+20+3 x := SomeFinc (10,20,30); //будет возвращено 10+20+30 end;

Таким образом, параметры надо упорядочивать так, чтобы наиболее часто опускаемые оказались в конце.

Следует быть осторожными при использовании параметров по умолчанию в перегружаемых функциях. Например:

Procedure Bad(i: integer); overload; ...

procedure Bad(i: integer; j: integer = 0); overload; ...

Procedure Test; var X: integer; begin X := 1; //Bad(X); ошибка компиляции end;

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

    1. С++ Значения параметров по умолчанию

Язык С++ также позволяет задавать для параметров функций, как свободных, так и функций-элементов классов, параметры по умолчанию. Задавать значение по умолчанию можно только для завершающих подряд идущих параметров:

int f(int, int =0, char* =0); // правильно //int g(int =0, int =0, char*); // ошибка //int h(int =0, int, char* =0); // ошибка

Также существуют функции, в описании которых невозможно указать число и типы всех допустимых параметров. Тогда список формальных параметров завершается многоточием (...), что означает: «и, возможно, еще несколько аргументов». Например:

int printf(const char* ...);

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