Читайте также:
|
|
Рассмотрим ф-ию, ее определение выглядит следующим образом:
void starline() // заголовок функции
{
for(int j=0; j<45; j++) // тело функции
cout << '*';
cout << endl;
}
Определение ф-ии состоит из заголовка и тела ф-ии. Тело ф-ии состоит из последовательности операторов. Заголовок должен соответствовать ее прототипу: имя ф-ии и тип возвращаемого ей значения должны совпадать; кроме того, аргументы ф-ии, если есть, должны иметь теже типы и следования в том же порядке, в каком они указаны в прототипе. Когда происходит вызов ф-ии, прог-а передает управление первому оператору тела ф-ии. Затем исполняются операторы, находящиеся в теле ф-ии, и когда достигается заключающая фигурная скобка, управление передается обратно вызывающей прог-е.
Передача аргументов и возврат значения по значению
Способ передачи аргументов, при котором ф-ия создает копии передаваемых значений, называется передачей аргументов по значению. Переменные инициализируются переданными в ф-ию значениями, после чего доступ осуществляется к ним так же, как и к другим переменным ф-ии.
Тип возвращаемого значения указывается перед именем ф-ии при объявлении и определении. Пр.: float lbstokg (float). Первое слово float означает, что ф-ия возвращает значение типа float, а слово float, заключенное в скобках, указывает на наличие у ф-ии одного аргумента этого типа. Возвращение прог-е переменной осуществляется с помощью оператора return. Он возвращает только один аргумент.
Ссылка является псевдонимом, или альтернативным именем переменной. Важное применение ссылок: передача аргументов в ф-ию. Ф-ии передается ссылка на переменную(адрес.)
Пр.: void intfrac(float, float&, float&);
Аргументы, передаваемые по ссылке, обозначаются &. При вызове ф-ии амперсанты отсутствуют.
Рассмотрим ф-ию:
void centimize (double*);
Ф-ия объявлена использующей параметр как указатель на double. Когда ф-ия main() вызывает ф-ию, она передает в качестве аргумента адрес переменной: centimize (&var). Т.к. ф-ия получает адрес, то она может использовать операцию разыменования (*а) для доступа к значению, расположенного по адресу. Передача указателя в ф-ию в качестве аргумента похожа на передачу по ссылке. Они обе позволяют переменной вызывающей прог-ы быть измененной в ф-ии.
Аргументы по умолчанию
Рассмотрим программу:
#include <iostream>
using namespace std;
void repchar(char='*', int=45); // прототип с аргументами по умолчанию
int main()
{
repchar(); // печатает символ '*' 45 раз
repchar('='); // печатает символ '=' 45 раз
repchar('+', 30); // печатает символ '+' 30 раз
return 0;
}
//--------------------------------------------------------
void repchar(char ch, int n) // при необходимости будут
{ // использоваться значения по умолчанию
for(int j=0; j<n; j++) // цикл n раз
cout << ch; // вывод ch
cout << endl;
}
Первые два раза работают, потому что ф-ия имеет аргументы по умолчанию. Можно определить значения по умолчанию если в прототипе фигурируют имена переменных. Опускать при вызове можно аргумент, стоящий в конце списка.
Рассмотрим прототип ф-ии:
// демонстрирует константные аргументы функций
void aFunc(int& a, const int& b); // прототип функции
int main()
{
int alpha = 7;
int beta = 11;
aFunc(alpha, beta);
return 0;
}
//--------------------------------------------------------
void aFunc(int& a, const int& b) // определение функции
{ a = 107; // корректно
b = 111; // ошибка при изменении конст. аргумента
}
Любая попытка изменить значение beta приведет к ошибке. Многие библиотечные ф-ии используют константные аргументы.
Дата добавления: 2015-08-17; просмотров: 105 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Синтаксис определения, инициализация указателя на структуру. Работа с полями структуры через указатели. | | | Перегруженные функции. Встроенные функции. Рекурсивные функции. |