Ho questa classe:

codice:
class CPolynom
{
      private:
              int degree;
              double * coeff;
      public:
             CPolynom(const CPolynom &);
             CPolynom(int d) {coeff = new double[d+1]; degree=d;};
             virtual ~CPolynom() {delete [] coeff;};
             int get Degree() const {return degree;};
             double* getCoeff() const {return coeff;};
             
             CPolynom deriv() const;
             CPolynom multiply(const CPolynom& p) const;
}
E mi è stato dato questo costruttore che non capisco però:

codice:
CPolynom::CPolynom(const CPolynom & p){
       degree = p.getDegree();
       coeff = new double[degree+1];
       double* coeff2 = p.getCoeff();
       for(int i=0; i<=degree; i++) coeff[i]=coeff2[i];
}
Il mio esercizio è di implementare la funzione:

codice:
CPolynom CPolynom::deriv() const.
Che deve fare la derivata di un polinomio (per esempio 10x^3 + 10x^2 + 11x + 2 deve diventare 30x^2+38x+11).

Solo che non so da dove partire, non so dove li prendo i coefficienti e gli esponenti, e fatico anche a capire cosa vogliono dire diverse cose, tipo per esempio CPolynom::deriv() perchè usa questo tipo di scrittura? Cosa vuol dire?

Sono in alto mare, mi date qualche delucidazione?