Основы использования функций.
Функции – этьо подпрограммы , которые содержат одну или несколько инструкций. Функции называются строительными блоками С++, поскольку программа в С++ , как правило, представляет собой коллекцию функций.
Общий формат С++ функций
Все С++ функции имеют общий формат
Тип_возвращаемого значения имя (список _параметров)
{
// тело функции
}
С помощью элемента тип_возвращаемого_значения указывается тип значения возвращаемого функцией. Это может быть любой тип , за исключением массива. Если функция не возвращает никакого значения , необходимо указать тип void.
В качестве имени можно использовать любой допустимый идентификатор, который еще не был задействован в программе.
После имени функции в круглых скобках указывается список параметров, который представляет собой список пар ( состоящих из типа данных и имени ), разделенных запятыми.
Параметры – это по сути переменные, которые получают значения аргументов, передаваемых функции при вызове.
Если функции не имеют параметров, то круглые скобки остаются пустыми.
В фигурные скобки заключено тело функции. Тело функции составляют С++-инструкции, которые определяют действие функции. Функция завершается ( и управление передается вызывающей процедуре) при достижении закрывающейся скобки или инструкции return
Создание функции.
#include<iostream>
using namespace std;
void myfunc();// прототип функции myfunc()
void main()
{
cout<<”В функции main().”<<endl;
myfunc();
cout<<”Снова в функции main().”<<endl;
}
// Определение функции myfunc()
void myfunc()
{
cout<<”В функции myfunc().”<<endl;
}
Использользование аргументов
Функции можно передать одно или несколько значений. Значение передаваемое функции называется аргументом.Таким образом, аргументы представляют собой средсьво передачи инициализации в функцию.
При создании функции, которая принимает одно или несколько аргументов, необходимо объявить переменные, которые получат значения этих аргументов. Эти переменные называются параметрами функции.
#include<iostream>
using namespace std;
void box(int length, int width, int height);// прототип функции
void main()
{
box(7,20,4);
box(50,3,2);
box(8,6,9);
}
// Определение функции box()
void box(int length, int width, int height)
{
cout<<” Объем параллелепипеда равен ”<< lengtht* width* height <<endl;
}
Использользование инструкции return
В предыдущих примерах возврат из функции к инициатору ее вызова происходил при обнаружении фигурной скобки. Однако это приемлимо не для всех функций.
Возврат значений.
Использование функции в выражениях
Правила действия областей видимости функций.
Локальная область видимости
Локальные переменные можно объявлять внутри любого блока.
Сокрытие имен
Параметры функции
Глобальная область видимости
Передача указателей и массивов в качестве аргументов функций
Передача функции указателя
Передача функции массива
Передача функциям строк
Возвращение функциями указателей
Оформление функции в С++
Тип имя функции (список формальных параметров);
Типы функции
int
double
char
void (не возвращает значений)
Функция - именованный набор операторов.
Если р1 и р2 функции, и р1 вызывает р2, то р2 должна быть описана раньше р1.
Если тело функции идет после main() , то перед main() должен стоять прототип функции.
Пример 1
Функция плюс
# include <iostream.h>
void plus (int,int,int); // прототип функции plus, параметры переданы по значению
void plus1 (int,int,int&); // прототип функции plus1, последний параметр передан по ссылке
int plus2(int, int) //результат функции число типа int
Void main()
{
int a=4; int b=5; int c=10;
cout<<”plus()”<<endl;
plus(a,b,c);
cout<<”c=”<<c<<endl; //9
plus1(a,b,c);
cout<<”c=”<<c<<endl; //10
int c2=plus2(a,b);
cout<<”c2=”<<c2<<endl; //9
// Возможен вариант
cout<<”plus2()=”<<plus2(a,b)<<endl; //9
}
Void plus (int x, int y, int z)
{
cout<<”x=”<<x<< endl; //4
cout<<”y=”<<y<< endl; // 5
cout<<”z=”<<z<< endl; // 10
z=x+y;
cout<<”z=”<<z<< endl; // 9
}
void plus1 (int x, int y, int &z)
{
cout<<”x=”<<x<< endl; //4
cout<<”y=”<<y<< endl; // 5
cout<<”z=”<<z<< endl; // 10
z=x+y;
cout<<”z=”<<z<< endl; // 9
}
Int plus2 (int x, int y)
{
cout<<”x=”<<x<< endl; //4
cout<<”y=”<<y<< endl; // 5
cout<<”x+y”<<x+y<< endl; // 9
return x+y;
}
Примечание
При вызове функций plus2() на месте аргументов могут быть любые выражения данного типа.
plus2(a+b*c,2*c);
plus2(5,7);
Передача массивов функции.
Пример 2.
# include <iostream.h>
const int n=10;
void create ( int x[], int k);
//возможный вариант void vvod ( int x[n])
void show ( int x[], int k);
int max (int x[], int k);
void main()
{
int a[n];
create(a,n);
show ( a, n);
cout<< “max(a,n)= ”<<max(a,n)<<endl;;
}
void create ( int x[], int k)
{
int i;
for (i=0; i<k; i++)
{
cout<<”x[“<<i<<”]=”;
cin>>x[i];}
}
}
void show ( int x[], int k)
{
int i;
for (i=0; i<k; i++)
cout<<x[i]<<”_”;
}
int max(int x[], int k)
{
int i;
int m;
m=a[0];
for (i=0; i<k; i++)
if (m<x[i]) m=x[i];
return m;
}
Лекция №9
Динамические массивы
Задание статического массива
const int n=10;
int a[n];
Задание динамического массива
int n;
cout<< “Enter n:”;
cin>>n;
int*b //указатель на первый элемент массива
b= new int[n];
delete [] b - после работы программы необходимо освободить память «кучи» от b.
В параметрах функций динамический массив задается так же, как и статический
void vvod ( int x[], int n);
Или
void vvod ( int *x, int n);
void vvod ( int x[n])
Примечание
int*p;
p=new int;
*p=10; (косвенная динамическая память)
delete p ; (возврат памяти)
Задание двумерного динамического массива
Память выделяется в 2 этапа: сначала под строку указателей на столбцы, а затем в цикле под каждый столбец.
int colstr; colstb;
cout<< “Enter colstr:”;
cin>> colstr;
cout<< “Enter colstb:”;
cin>> colstb;
int **b;
b=new int*[colstr];
for (int i<0;i<colstr;i++)
b[i]=new int[colstb];
Соответственно, необходимо delete[][]b;
В параметрах функций
void create ( int **x, int n, int m);
void show( int **x, int n, int m);
Задача 1.