6 Функции
Одним из основных элементов программы на языке считается функция. Функция предназначена для создания программных проектов разной степени сложности. Функции, которые предназначены для реализации сложных задач, могут в свою очередь содержать обращения к другим функциям, предназначенным для решения менее сложных задач. Реализация любого проекта в языке С++ допускает функциональную декомпозиция, когда функции более высокого уровня обеспечивают данными и воспринимают результаты функций более низкого уровня.
Используя функции, следует различать три понятия – определение функций (описание действий, которые выполняются функцией – выходной код), объявление функции (задание формы обращения к функции – прототип) и вызов функции.
Синтаксис С++ предусматривает, чтобы функция была либо определена, либо объявлена до ее вызова. Объявление функции (задание прототипа функции) содержит имя функции; тип результата, который возвращается; список формальных параметров и их типа, или указание только типов формальных параметров.
В языке С++ определено несколько способов передачи параметров функции и получения результатов вычисления функции. Существует четыре базовых способа передачи параметров: вызов функции с передачей значений; вызов функции с передачей адресов переменных; вызов функций с использованием механизма отправки или передачи параметров; с помощью глобальных параметров. Но не каждый из этих способов обеспечивает возвращение измененных параметров в основную функцию.
Имя функции может быть параметром для другой функции. Можно организовать также встроенную функцию по схеме
inline void myPrint(void) { cout << " Text" << endl; } ,
что значительно сокращает время выполнения программы. Язык С++ допускает перегрузку функций – вызов функций с одинаковым именем, но с разными типами фактических параметров. Для этого используется отдельный прототип и описание каждого списка параметров.
Пример 6.1.
Создать функция сортировки в одномерном массиве отрицательных элементов на своих местах.
#include <iostream.h>
const int n=5;
int i, mas[n];
int s=0; int *x;
void SortArr(int *x, int n)
{ int i,j,xmin,imin;
for(j=0;j<n-1;j++)
{
if (*(x+j)<0)
xmin=*(x+j);
for(i=j+1;i<n;i++)
if ((*(x+i)<xmin) || (*(x+i)<0))
{xmin=*(x+i); imin=i;}
*(x+imin)=*(x+j); *(x+j)=xmin;
}
}
// Главная функция
int main()
{ x=&mas[0];
cout<<”\n input 5 members of massiv \n”;
for (i=0;i<n;i++;x++) cin>>*x;
cout<<”Your members:\n”;
for(i=0;i<n;i++) cout <<*(mas+i)<<’ ‘;
cout <<”\n”;
SortArr (mas,n);
cout<<” Result:massiv”<<”\n”;
for(i=0;i<n;i++) cout <<*(mas+i)<<’ ‘;
cout <<”\n”;
getch() ;
return(0);
}
6.2 Контрольные вопросы и задания
Для чего нужен прототип функций?
Как запрограммировать функцию с переменным количеством параметров?
Как правильно работать со ссылками и указателями, которые передаются внутрь функций? Необходимо ли разименование?
Использование функция-указателей.
организация работы с массивами в функциях.
Чем использование ссылок отличается от указателей как параметров?
Что такое локальные и глобальные переменные?
Может ли функция быть параметром другой функции?
