Listing 3: Polynomial template class
// poly.h - polynomial template class // #include <stdexcept> #include <vector> #include <memory> #include <function> #include <stdlib> template<class T> class polynomial { public: ~polynomial(); // constructors // initializes the constant term polynomial( const T& x0 = T(0.0) ); // initializes from an array of coefficients polynomial( unsigned nc, const T *init ); // copy constructor polynomial( const polynomial<T>& cp ); // evaluate the function for a given x T operator()( const T& x ) const; // chain a polynomial polynomial<T> operator()( const polynomial<T>& P ) const; // access coefficient array T& operator[](int); const T& operator[](int) const; // equality bool operator==( const polynomial<T>& A ) const; bool operator!() const { return *this == polynomial<T>(0.0); } // assignment polynomial<T>& operator=( const polynomial<T>& cp ); polynomial<T>& operator+=( const polynomial<T>& P ); polynomial<T> operator+( const polynomial<T>& P ) const { return polynomial<T>(*this) += P; } polynomial<T>& operator-=( const polynomial<T>& P ); polynomial<T> operator-( const polynomial<T>& P ) const { return polynomial<T>(*this) -= P; } polynomial<T> operator-() const; polynomial<T> operator+() const { return *this; } // same as multiplying by x ^ i polynomial<T> operator<<( int i ) const { return polynomial<T>(*this) <<= i; } // same as multiplying by x ^ -i polynomial<T> operator>> ( int i ) const { return operator<<(-i); } polynomial<T>& operator<<=( int i ) { ofs-=i; return *this; } polynomial<T>& operator>>=( int i ) { return operator<<=(-i); } polynomial<T> operator*( const polynomial<T>& P ) const; polynomial<T>& operator*=( const polynomial<T>& P ) { return *this = (*this * P); } polynomial<T> operator/( const polynomial<T>& D ) const; polynomial<T>& operator/=( const polynomial<T>& D ) { return *this = operator/(D); } // returns the deriviative function polynomial<T> derivative() const; // returns the integral function for the interval from c to x polynomial<T> integral( const T& c ) const; int upper() const; int lower() const; private: std::vector<T> C; unsigned n; // number of elements in array int ofs; // array offset const T T0; // additive identity of template parameter }; //not shown: implementation of constructors, destructor, operators // derivative()const, integral (const T & c) const, // -- mb // ... //not shown: integral(const T& c) const, inserters -- mb // ... /* End of File */