Формальные параметры функций описываются в списке параметров функции.



Рассмотрим особенности использования локальных и глобальных переменных в программах на С++:

1. Область видимости и использования локальной переменной ограничена функцией, где она определена.

2.Глобальные переменные объявляются вне любых функций и их областью видимостью является весь файл.

3.Одно и тоже имя может использоваться при определении глобальной и локальной переменной. В этом случае в функции, где определена локальная переменная действует локальное описание, вне этой функции «работает» глобальное описание.

 

Из функции, где действует локальное описание переменной можно обратиться к глобальной переменной с таким же именем, используя оператор расширения области видимости ::переменная.

Рассмотрим это на примере

#include "stdafx.h"

#include <iostream.h>

float pr=100.678;

int prostoe (int n)

{

int pr=1,i;

if (n<0) pr=0;

else

for (i=2;i<=n/2;i++)

 if (n%i==0){pr=0;break;}

// Вывод локальной переменной

cout<<"local pr="<<pr<<endl;

// Вывод глобальной переменной

cout<<"global pr="<<::pr<<endl;

return pr;

}

int main()

{

int g;

cout<<"g=";

cin>>g;

if (prostoe(g)) cout<<"g – prostoe";

else cout<<"g – ne prostoe";

return 0;

}

 

Результаты работы программы

 

g=7

local pr=1

global pr=100.678

g - prostoe

Press any key to continue

 

Перегрузка и шаблоны функций

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

Функция возведения в степень неопределена при 00 и при возведении отрицательного x в дробную степень n=k/m в случае четного m.

Пусть наша функция в этих случаях будет возвращать 0.

#include "stdafx.h"

#include <iostream.h>

#include <math.h>

float pow(float a, int k, int m)

{

cout<<"function 1\t";

if (a==0) return (0);

else

if (k==0) return(1);

else

if (a>0)

return(exp((float)k/m*log(a)));

else

if (m%2!=0)

return (-(exp((float)k/m*log(-a))));

}

float pow(float a, int n)

{

if (a==0)

{cout<<"function 2\t";return (0);}

else

if (n==0)

{cout<<"function 2\t";return (1);}

else

if (n<0) return(1/pow(a,-n));

else

return(a*pow(a,n-1));

}

int pow(int a, int n)

{

if (a==0)

{cout<<"function 3\t";return (0);}

else

if (n==0)

{cout<<"function 3\t";return (1);}

else

if (n<0) return(1/pow(a,-n));

else

return(a*pow(a,n-1));

}

int main()

{

float a;

int k,n,m;

cout<<"a=";

cin>>a;

cout<<"k=";

cin>>k;

cout<<"s="<<pow(a,k)<<endl;

cout<<"s="<<pow((int)a,k)<<endl;

cout<<"a=";

cin>>a;

cout<<"k=";

cin>>k;

cout<<"m=";

cin>>m;

cout<<"s="<<pow(a,k,m)<<endl;

return 0;

}

Результаты работы программы

a=5.2

k=3

function 2 s=140.608

function 3 s=125

a=-8

k=1

m=3

function 1 s=-2

Press any key to continue

 

Если перегрузку можно применять при использовании различных алгоритмов решения задачи при различных типах исходных данных и просто при различных типах исходных данных, то при использовании различных типов исходных данных можно применять шаблоны.

Шаблон – это особый вид функций, который начинается со служебного слова template, за которым в угловых скобках (<>) следует список используемых в функции типов данных. Каждый тип предваряется служебным словом class. Можно сказать, что в случае шаблона в качестве параметров выступают не только переменные, но их типы.

Рассмотрим пример шаблона поиска наименьшего из четырех чисел.

#include "stdafx.h"

#include <iostream.h>

//Определяем абстрактный тип данных с

// помощью служебного слова Type

template <class Type>

// Определяем функцию с использованием

// типа данных Type

Type minimum(Type a, Type b, Type c, Type d)

{

Type min=a;

if (b<min) min=b;

if (c<min) min=c;

if (d<min) min=d;

return min;

}

int main()

{

int ia,ib,ic,id,mini;

float ra,rb,rc,rd,minr;

cout<<"Vvod 4 thelih chisla\t";

cin>>ia>>ib>>ic>>id;

//Вызов функции minimum, в которую

// передаем 4 целых значениями

mini=minimum(ia,ib,ic,id);

cout<<"\n"<<mini<<"\n";

cout<<"Vvod 4 vecshestvenih chisla\t";

cin>>ra>>rb>>rc>>rd;

//Вызов функции minimum, в которую

// передаем 4 вещественных значениями

minr=minimum(ra,rb,rc,rd);

cout<<"\n"<<minr<<"\n";

return 0;

}


Дата добавления: 2019-09-13; просмотров: 245; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!