Формальные параметры функций описываются в списке параметров функции.
Рассмотрим особенности использования локальных и глобальных переменных в программах на С++:
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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!