Операция расширения области видимости
Макроподстановка (inline-подстановка) функций
Если часто повторяется обращение к очень маленькой функции, то можно начать беспокоиться о стоимости вызова функции. В этом случае можно рассмотреть возможность спецификации функции как inline-подставляемой. При этом компилятор сгенерирует для функции соответствующий код в месте ее вызова, в результате чего время выполнения программы сокращается. Это особенно эффективно для небольших функций, которые вызываются в программе много раз. Если функция слишком велика, то компилятор может проигнорировать рекомендацию пользователя подставить в программный код тело функции по месту ее вызова. Семантика вызова не изменяется.
Пример: Вычислить значение интеграла, используя метод хорд,
#include<iostream.h>
#include<math.h>
inline float F(float x){return(2*sin(x));}
main()
{
float a,b,x,h,I=0,k=sqrt(2)/2,c,c1,c2;
int n;
cout<<"Введите пределы интегрирования:"<<endl;
cout<<"А="; cin>>a;
cout<<"В="; cin>>b;
cout<<"Введите число интервалов N= "; cin>>n;
h=(b-a)/n;
for(int i=1;i<=n;i++)
{
c=a+h;
c1=(c+a)/2;c2=(c-a)/2;
x=c1-c2*k;
for(int j=1;j<=3;j++)
{I=I+F(x);
x=x+c2*k;
}
a=c;
}
I=I*h/3;
cout<<"I="<<I;
}
РЕЗУЛЬТАТ:
Введите пределы интегрирования
А=1
В=2
Введите число интервалов N=12
I=1.9129
Иногда полезно делать явное различие между идентификаторами функций и прочими идентификаторами. Для этого используется операция :: - "расширения области видимости". Имя с префиксом :: (просто) должно быть глобальным именем.
Пример:
#include<iostream.h>
int koeff=5;
int fakt(int a);
main()
{
int koeff=3,a;
cout<<"Введите значение а:"<<endl;
cin>>a;
a=fakt(a);
cout<<"Произведение факториала "<<a
<<" на коэффициент "<<koeff<<" равно "<<koeff*a<<endl;
cout<<"Произведение факториала "<<a
<<" на коэффициент "<<::koeff<<" равно "<<::koeff*a;
}
int fakt(int a)
{
int p=1;
for(int i=2;i<=a;i++)
p=p*a;
return(p);
}
Результат:
Введите значение а:
Произведение факториала 625 на коэффициент 3 равно 1875
Произведение факториала 625 на коэффициент 5 равно 3125