- •Предисловие
- •Введение Эволюция разработки программного обеспечения
- •Технологии программирования
- •Основные понятия объектно-ориентированного программирования
- •Инкапсуляция
- •Свойства
- •Векторные свойства
- •Создание и уничтожение объектов
- •Конструкторы
- •Деструкторы
- •Наследование
- •Свойства
- •Конструкторы и деструкторы класса-предка
- •Полиморфизм, виртуальные и динамические методы
- •Статическое перекрытие виртуальных методов
- •Виртуальное перекрытие конструкторов и деструкторов
- •Абстрактные методы
- •Области видимости
- •Перекрытие и переопределение свойств
- •Перекрытие методов доступа к свойствам
- •Приведение объектных типов, операторы as и is
- •Агрегация
- •События
- •Процедурный тип
- •Создание события
- •Инициаторы события
- •Делегирование
- •Внутреннее устройство объекта
- •Указатели на класс
- •Виртуальные конструкторы
- •Методы класса
- •Обработка исключительных ситуаций
- •Операторы try...Except и try...Finally
- •Исключительные ситуации как объекты
- •Перегрузка методов
- •Перегрузка виртуальных методов
- •Параметры по умолчанию
- •Основы объектно-ориентированного анализа и проектирования
- •Объектно-ориентированная модель
- •Классы и объекты
- •Заключение Применение объектно-ориентированного программирования
- •Библиографический список
-
Параметры по умолчанию
Процедуры и функции, свободные или являющиеся методами классов, могут иметь параметры по умолчанию. Часто при вызове процедур и функций нужно передавать параметры, имеющие одно и то же значение. Но заменить их на константы нельзя – иногда они могут меняться.
Для того чтобы не указывать каждый раз одно и то же значение, используются значения параметров по умолчанию. Прямо в объявлении функции указывается, что те или иные параметры должны принимать определенные значения, если они не заданы явно. В качестве значений параметров по умолчанию можно использовать именованные или неименованные константы или константные выражения.
Например:
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;
Ошибка компиляции произойдет, поскольку невозможно определить, какую именно из перегруженных процедур нужно вызвать. Возможно – процедуру с единственным параметром, а возможно – процедуру с двумя параметрами, но второй параметр принимает значение по умолчанию.
-
С++ Значения параметров по умолчанию
Язык С++ также позволяет задавать для параметров функций, как свободных, так и функций-элементов классов, параметры по умолчанию. Задавать значение по умолчанию можно только для завершающих подряд идущих параметров:
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* ...);
Такие функции должны использовать для распознавания своих фактических параметров недоступной транслятору информацией – при этом нет проверки типов. Пользоваться этой возможностью не рекомендуется