Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Решенные оветы на теорию Си.docx
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
166.91 Кб
Скачать

32. Передача в функции аргументов по умолчанию.

Язык С++ позволяет присваивать параметрам функции значения по умолчанию в том случае, когда при вызове функции не указываются параметры. Значения по умолчанию задаются синтаксически сходным образом с инициализацией переменных. Например, ниже объявляется функция f(), имею­щая аргументом целую переменную, значением которой по умолчанию является величина 1: void f (int i = 1) { ... }

Теперь функция f() может вызываться двумя способами, как показано ниже: f(10); // явная передача значения f (); // функция использует значение по умолчанию

В первом случае аргументу i будет присвоено значение 10. Во втором случае i получит значение по умолчанию, равное 1.

Аргументы по умолчанию в языке С++ позволяют программисту писать более простой код. Для того, чтобы охватывать множество ситуаций, часто функция содержит больше параметров, чем это необходимо при ее наиболее типичном использовании. Используя аргументы по умолча­нию, можно указать только аргументы, которые отличаются от значений по умолчанию в каж­дой конкретной ситуации.

В общем случае при вызове функции ее аргументы совмещаются с соответствующими параметрами слева направо. После того, как всем использованным при вызове функции аргументам поставле­ны в соответствие параметры, оставшимся аргументам присваиваются их значения по умолчанию.

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

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

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

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

33. Шаблоны функций. Особенности и использования.

Шаблоны функции определяют типонезависимую функцию, т. е. она работает с типами, которые в процессе копмилляции подставляются вместо формальных. Можно провести аналогию формальными и фактическими параметрами функций: мы описываем какие-то переменные определённого типа, а получаем те фактические параметры, которые подаём на их место. Так же и здесь: мы объявляем формальный тип, а потом "кидаем" его в функцию. Это можно сделать указав после имени функции список типов в угловых скобках. Для примера рассмотрим функцию, которая вычисляет минимум из двух чисел:

template<class T> // или template<typename T>

T min (T a, T b)

{ // не используя тернарный оператор:

return a < b ? a : b; // if(a < b) return a;

} // else return b;

Вызвать её из программы можем для разных типов, например:

float a = min<float>(b, c);

char ch = min<char>('#', 't');

Шаблоны могут использовать и несколько типов. В общем виде можно описать так:

template<typename <имя типа>[, typename <имя типа>]>

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

{

// тело функции

}

Основные концепции:

  • Шаблоны функций позволяют вам объявлять типонезависимые, или общие, функции.

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

  • Когда компилятор C++ встретит такой прототип функции, он создаст операторы, соответствующие этой функции, подставляя требуемые типы.

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

  • Если функция требует несколько типов, шаблон просто назначает каждому типу уникальный идентификатор, например Т, T1 и Т2. Позже в процессе компиляции компилятор C++ корректно назначит типы, указанные вами в прототипе функции.

Структурное программирование