03.12.2012 Views

C++ for Scientists - Technische Universität Dresden

C++ for Scientists - Technische Universität Dresden

C++ for Scientists - Technische Universität Dresden

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

4.8. FUNCTORS 113<br />

struct functor base<br />

{<br />

virtual double operator() (double x) const= 0 ;<br />

} ;<br />

double finite difference( functor base const& f, double x, double h )<br />

{<br />

return ( f(x+h) − f(x) ) /h ;<br />

}<br />

The functor class has a pure 22 virtual function operator() and thus can not be used. We can<br />

however alter the functor para sin plus cos such that it inherits from the abstract base class and<br />

specializes operator().<br />

class para sin plus cos<br />

: public functor base<br />

{<br />

public:<br />

para sin plus cos(double p) : parameter(p) {}<br />

double operator() (double x) const // Is virtual function in base<br />

{<br />

return sin( parameter ∗ x ) + cos(x);<br />

}<br />

private:<br />

double parameter;<br />

};<br />

Now we can use an object of this class as the first argument of finite difference.<br />

The whole program looks as follows:<br />

#include <br />

#include <br />

struct functor base {<br />

virtual double operator() ( double x ) const = 0 ;<br />

} ;<br />

double finite difference( functor base const& f, double x, double h ) {<br />

return ( f(x+h) − f(x) ) /h ;<br />

}<br />

class para sin plus cos<br />

: public functor base<br />

{<br />

public:<br />

para sin plus cos( double const& p )<br />

: parameter ( p )<br />

{}<br />

double operator() ( double x ) const { // Virtual function<br />

return sin( parameter ∗ x )+ cos(x) ;<br />

22 TODO: undefined

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!