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