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