Преклапање оператора () – позивање функција

За преклапање оператора () може се користити само метода дате класе, али заједничка метода (static) не сме, и не смеју бити пријатељске функције!
Оператор () је бинарни оператор којем одговара функција operator()(). Позивање f(a1,…,aN) је еквивалентно изразу f.operator()(a1,…,aN). Преклапање () у некој класи омогућава изразе са o(a1,…,aN), где је o објекат дате класе. Код овог оператора може постојати произвољан број параметара, укључујући и нула параметара.

Пример: за дефиниције

P p; float x;

где је P класа полинома, може се писати p(x) за вредност полинома у x, ако се преклопи функција operator()(float). У том случају објекти у себи носе коефицијенте полинома, па је сваки објекат неки други полином.

Пример: Написати програм који дефинише класу синуне функције облика a*sin(ω*x+φ)

#include<cmath>
 #include<iostream>
 using namespace std;
 class Sin
 {
      double a,omega,fi;
 public:
      Sin(double aa=1,double oomega=1,double ffi=0)
      {a=aa;omega=oomega;fi=ffi;}
      double operator()(double x){return a*sin(omega*x+fi);}
 };
 const double PI=3.141592;
 int main()
 {
      Sin sinus(2,0.5,PI/6);
      for(double x=0;x<=2*PI;x+=PI/12)
           cout<<x<<'\t'<<sinus(x)<<'\t'<<sin(x)<<endl;
 }

Приватна поља a, omega и fi у класи Sin представљају параметре синусоиде, а подразумеване вредности у конструктору су изабране тако да (подразумевани) објекат представља функцију sinx. Операторска функција operator()(double) за дату вредност параметра x израчунава вредност синусоиде која зависи и од вредности поља у објекту. Вредност променљиве x не смешта се у објекат. У главном програму врши се табелирање вредности функција 2sin(x/2+π/6) и sinx за све вредности променљиве x од 0 до 2π са кораком π/12. За рачунање вредности прве функције користи се објекат sinus типа Sin, а за другу функцију користи се стандардна библиотечка функција sin описана у стандардном заглављу cmath.

делови текста преузети са: Preklapanje operatora

Advertisements

Оставите одговор

Попуните детаље испод или притисните на иконицу да бисте се пријавили:

WordPress.com лого

Коментаришет користећи свој WordPress.com налог. Одјавите се / Промени )

Слика на Твитеру

Коментаришет користећи свој Twitter налог. Одјавите се / Промени )

Фејсбукова фотографија

Коментаришет користећи свој Facebook налог. Одјавите се / Промени )

Google+ photo

Коментаришет користећи свој Google+ налог. Одјавите се / Промени )

Повезивање са %s