So far, our polynomial is not really useful and there is not much it has in common with a polynomial from mathematics. What is missing? Polynomials may be evaluated. So we want to say: p(3) and get a result for x = 3. How to do that? Obviously some new declarative stuff is necessary. We have to tell the compiler that a polynomial with a following bracket should be evaluated as a function:
1 class Polynomial : public vector<double> { 2 public: 3 // ... 4 // function evaluation 5 double operator () (double x) const; 6 // ... 7 }; 8 9 double Polynomial::operator () (double x) const 10 { 11 double xx = 1; // temporary for powers of x 12 double y = 0; // will contain the result 13 for ( int i=0 ; i<=size()-1 ; ++i ) 14 { 15 y += (*this)[i] * xx; // add coefficient * x^n 16 xx *= x; // next power 17 } 18 return y; // return result 19 } 20 21 int main() 22 { 23 Polynomial p(4); 24 p[0] = 1; 25 p[4] = 2; 26 27 cout << "p = " << p << endl; // print it 28 cout << "p(3.4) = " << p(3.4) << endl; // evaluate and print it 29 return 0; 30 }Download Full Source
We printed only new lines of code with occasionally a few lines of environment to avoid any ambiguities.
Line by line walk through:
The program will return:
p = 2*x^4 + 1 p(3.4) = 268.267