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

Возврат в вызывающую функцию

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

return(ВозвращаемоеЗначение);

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

Функции могут и не возвращать значения, а просто выполнять некоторые вычисления. В этом случае указывается пустой тип возвращаемого значения void, а операторreturn может либо отсутствовать, либо не возвращать никакое значение:

48.Способ передачи аргументов в функции. Массивы как параметры функций.

Передача собственно значения аргумента

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

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

Передача адреса аргумента (передача по указателю)

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

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

При передаче по ссылке обеспечивается непосредственный доступ из тела функции к соответствующему аргументу. При вызове функции аргумент задается в виде переменной (без указания символа адреса &), а все обращения к параметру внутри функции разыменовываются неявно.

49.Перегрузка функций. Функции с переменным числом аргументов. Задание параметров функции по умолчанию.

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

Как уже обсуждалось ранее, по умолчанию параметры передаются функции через стек. Поэтому, технически, нет ограничения на количество передаваемых параметров – “запихать” можно сколько угодно. Проблема в том, как потом функция будет разбирать переданные параметры. Функции с переменным числом параметров объявляются как обычные функции, но вместо недостающих аргументов ставится многоточие. Пусть мы хотим сделать функцию, которая складывает переданные ей числа, чисел может быть произвольное количество. Необходимо каким-то образом передать функции число параметров. Во-первых, можно явно передать число параметров обязательным аргументом. Во-вторых, последний аргумент может иметь некоторое «терминальное» значение, наткнувшись на которое функция закончит выполнение. Общий принцип работы следующий: внутри функции берём указатель на аргумент, далее двигаемся к следующему аргументу, увеличивая значение указателя.

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

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

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

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

Чтобы лучше представить себе причины использования аргументов по умолчанию, рассмотрим следующий практический пример. Он содержит следующую полезную функцию xyout(): // выводит строку в позиции X, Y void xyout (char *str, int x = 0, int у = 0) { if (!x) x = wherex (); if (!y) у = wherey(); gotoxy(x, y); cout << str; }