The polynomial is now designed. The core class is pure virtual and note the merge sort methods have been moved to the polynomial class from the cell class.
class Complex_POLY_CORE{
friend class Complex_CELL_CORE;
friend istream& operator>>(istream& in,Complex_POLY_CORE& A)
{A.grab(in); return(in);};
friend istream& operator>>(istream& in,Complex_POLY_CORE* A)
{A->grab(in); return(in);};
friend ostream& operator<<(ostream& out,const Complex_POLY_CORE& A)
{A.print(out); return(out);};
friend ostream& operator<<(ostream& out,const Complex_POLY_CORE* A)
{A->print(out); return(out);};
public:
virtual ~Complex_POLY_CORE(){};
virtual int is_empty() = 0;
virtual void delete_power(unsigned int p) = 0;
virtual void search_power(unsigned int p) = 0;
virtual void build_list(Complex_VECTOR A) = 0;
virtual unsigned int get_degree() = 0;
virtual int insert(Complex new_element,unsigned int q) = 0;
virtual Complex_POLY_CELL* split(Complex_POLY_CELL *A) = 0;
virtual Complex_POLY_CELL* merge(Complex_POLY_CELL *A1,
Complex_POLY_CELL *A2) = 0;
virtual Complex_POLY_CELL* mergesort(Complex_POLY_CELL *A) = 0;
virtual void mergesort() = 0;
virtual istream& grab(istream& in) = 0;
virtual ostream& print(ostream& out) const = 0;
};