Ragazzi ho un problema con una gerarchia di classi ; questo è il codice
codice:
#ifndef PRODOTTO_H_
#define PRODOTTO_H_
#include <iostream>
#include <string>

using namespace std;

class prodotto{
      
      private:
              
         char* codice;
         char* descrizione;
         float costounitario;
         
      public:
             prodotto(const char *c="",const char *d="",const float cu=0.0)
             {codice=new char[strlen(c)+1];strcpy(codice,c);descrizione=new char[strlen(d)+1];strcpy(descrizione,d);costounitario=cu;}
             prodotto(const prodotto &);
             const prodotto & operator=(const prodotto &);
             virtual const string get_tipo()=0;
             virtual ~prodotto(){delete [] codice; delete [] descrizione;}
             const char* get_codice()const {return codice;}
             const char* get_descrizione() const {return descrizione;}
             float get_constounitario()const {return costounitario;}
             void set_codice(const char* CO) {delete[]codice;codice=new char[strlen(CO)+1];strcpy(codice,CO);}
             void set_descrizione(const char* DE) {delete[]descrizione;descrizione=new char[strlen(DE)+1];strcpy(descrizione,DE);}
             void set_costounitario(const float CU){costounitario=CU;}
      };
#endif

#ifndef LOTTO1_H_
#define LOTTO1_H_
#include "prodotto.h"
#include <iostream>
#include <string>

using namespace std;

class lotto1:public prodotto{
      
      private:
              const string tipo;
              int maxnum;
              
      public:
             lotto1(const string t="lotto1",const int m=0)
             {maxnum=m;}
             virtual const string get_tipo()const {return tipo;}
             int get_maxnum() const {return maxnum;}
             void set_maxnum(int MN) {maxnum=MN;}
      
      };
#endif

#ifndef LOTTO2_H_
#define LOTTO2_H_
#include "lotto1.h"
#include <iostream>
#include <string>

using namespace std;

class lotto2:public prodotto{
      
      private:
              const string tipo;
              float minimp;
              
      public:
             lotto2(const string t="lotto2",const float mi=0.0)
             {minimp=mi;}
             virtual const string get_tipo()const {return tipo;}
             float get_minimp()const {return minimp;}
             void set_minimp(const float MI) {minimp=MI;}
      };
#endif
Nel main non mi fa istanziare una variabile del tipo "lotto1 l1" dando il seguente errore
codice:
cannot declare variable `l1' to be of type `lotto1'  because the following virtual functions are abstract: 21 virtual const std::string prodotto::get_tipo()
allora se esiste una funzione virtuale pura in una classe la classe diventa astatta e non è possibile istanziare oggetti mentre è possibile istanziare oggetti per le classi derivate. Io nel main voglio istanziare un oggetto del tipo lotto1 e non me lo fa fare, come mai?Grazie mille per la risposta