What else can we do with polynomials? We may add them. Here it goes:
1 class Polynomial : public vector<double> {
2 public:
3 // ...
4 // declare addition operator
5 Polynomial operator + (const Polynomial & p) const;
6 // ...
7 };
8
9 Polynomial Polynomial::operator + (const Polynomial & p) const
10 {
11 Polynomial r(*this); // copy left polynomial into result
12 for ( unsigned int i=0 ; i<p.size() ; ++i ) // loop over right polynomial
13 if ( i<size() ) // check if coefficient index exist in result polysnomial
14 r[i] += p[i]; // yes: add coefficients from right polynomial
15 else
16 r.push_back(p[i]); // no: append coefficients from right polynomial
17 return r; // return result
18 }
19
20 int main()
21 {
22 Polynomial p(4);
23 p[0] = 1; // 1*x^0
24 p[4] = 2; // 2*x^4
25
26 Polynomial q(2);
27 q[0] = 1; // 1*x^0
28 q[1] = 2; // 2*x^1
29 q[2] = 3; // 3*x^2
30
31 cout << "p = " << p << endl; // print it
32 cout << "q = " << q << endl; // print it
33 cout << "p(3.4) = " << p(3.4) << endl; // evaluate and print it
34 cout << "q(3.4) = " << q(3.4) << endl; // evaluate and print it
35 cout << "p(3)+q(3) = " << p(3)+q(3) << endl;
36 cout << "p+q = " << p+q << endl;
37 cout << "(p+q)(3) = " << (p+q)(3) << endl;
38 return 0;
39 }
Download Full Source
Line by line walk through:
The program will return:
p = 2*x^4 + 1 q = 3*x^2 + 2*x^1 + 1 p(3.4) = 268.267 q(3.4) = 42.48 p(3)+q(3) = 197 p+q = 2*x^4 + 3*x^2 + 2*x^1 + 2 (p+q)(3) = 197
Further extensions are obvious...