Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C++] Funzioni virtuale pure

    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

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Nel prototipo della classe base manca il const finale.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Bene grazie mille

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.