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

    c++ - array di una classe che contiene figli

    ciao a tutti ho il problema seguente:

    ho una classe Prodotti, i cui figli sono: prodottiAlimentari e ProdottiNonAlimentari

    ereditano e sovra scrivano il metodo ApplicaSconto che varia a seconda delle caratteristiche del determinato prodotto

    poi ho una classe lista della spesa alla quale passo un array di Prodotti

    ora

    nel main vorrei fare cio'

    Prodotti lista_spesa[100];

    for (i; i < 100; i++)
    prezzo += lista_spesa[i].applicaSconto();

    ma non usa il metodo sovrascritto delle classi figlie ma quello della classe madre perchè? ce un modo per farlo?

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Non sono un esperto di C++ ma mi viene un dubbio: nella superclasse il metodo è segnato come virtuale? Credo che tu te lo sia dimenticato...
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    dunque io ne so sicuramente meno di te.. ho provato nel .h ad inserire "virtual" davanti al metodo della classe madre ma il risultato non cambia, va a prendere sempre il metodo della classe figlia

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Quote Originariamente inviata da formyblackart Visualizza il messaggio
    ma non usa il metodo sovrascritto delle classi figlie ma quello della classe madre perchè? ce un modo per farlo?
    Quote Originariamente inviata da formyblackart Visualizza il messaggio
    ma il risultato non cambia, va a prendere sempre il metodo della classe figlia
    Non ho capito, qual è la cosa che vuoi fare quindi?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    devo fare un array di Prodotti che contiene ProdottiAlimentari e ProdottiNonAlimentari in base alle scelte dell'utente, dopo di che per calcolare il totale in un ciclo per ogni Prodotto alimentare o non devo applicargli il relativo sconto, ogni sottoclasse ha il suo applicaSconto() ma quando provo viene applicato il metodo applicaSconto di Prodotti (classe madre) non dell'oggetto contenuto nella poszione i dell'array (alimentari o non)

  6. #6
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Fa vedere il codice, così che si capisca meglio quello che hai fatto
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  7. #7
    MAIN

    codice:
    #include "Prodotti.h"
    #include "ProdottiAlimentari.h"
    #include "ProdottiNonAlimentari.h"
    #include "Date.h"
    #include "ListaSpesa.h"
    
    /* time example */
    #include <stdio.h>      /* printf */
    #include <time.h>
    #include <iostream>
    
    using namespace std;
    using std::string;
    
    int main(int argc, char **argv) {
    
        Date data_1(23, 3, 2015);
    
        Prodotti lista[2];
    
        ProdottiNonAlimentari sapone(34545, "Sapone", 12.24, "cacca");
        ProdottiNonAlimentari sapone2(34545, "Sapone2", 100, "vetro");
        ProdottiAlimentari brioches(34545, "Biroches", 100, data_1);
    
        cout << sapone.getDescrizione() << " -> " << sapone.getPrezzo() << " euro" << endl;
        cout << brioches.getDescrizione() << " -> " << brioches.getPrezzo() << " euro" << endl;
    
        lista[1] = brioches;
        lista[0] = sapone2;
    
        cout << lista[0].applicaSconto() << endl;
        cout << lista[1].applicaSconto();
    
    
    //    ListaSpesa spesa(lista, false);
    
    
        //cout << spesa.calcolaTot();
    
        return 0;
    }
    PRODOTTI

    codice:
    #include "Prodotti.h"
    
    using namespace std;
    using std::string;
    Prodotti::Prodotti(long _codice_a_barre, string _descrizione, float _prezzo)
    {
    
        codice_a_barre = _codice_a_barre;
        descrizione = _descrizione;
        prezzo = _prezzo;
    
    }
    
    Prodotti::Prodotti(){
    
    }
    
    ....
    
    float Prodotti::applicaSconto(){
        prezzo  = prezzo - (prezzo/20);
        return prezzo;
    }
    PRODOTTI ALIMENTARE (concettualmente NonAlimentari è identico)

    codice:
    #include "ProdottiAlimentari.h"#include "Date.h"
    using namespace std;
    using std::string;
    
    ProdottiAlimentari::ProdottiAlimentari(long _codice_a_barre, string _descrizione, float _prezzo, Date _scadenza):Prodotti(_codice_a_barre, _descrizione, _prezzo)
    {
    
        codice_a_barre = _codice_a_barre;
        descrizione = _descrizione;
        prezzo = _prezzo;
        scadenza = _scadenza;
    
    }
    
    bool ProdottiAlimentari::GetScaduto(){
        return scadenza.getScaduto();
    }
    
    float ProdottiAlimentari::applicaSconto(){
    
        prezzo = prezzo - ((prezzo*20)/100);
    
        return prezzo;
    }
    PRODOTTI ALIMENTARI .H

    codice:
    class ProdottiAlimentari: public Prodotti{
        public:
            ProdottiAlimentari(long _codice_a_barre, string _descrizione, float _prezzo, Date _scadenza);
            bool GetScaduto();
            float applicaSconto();
    
        protected:
            int giorno;
            int mese;
            int anno;
            float prezzo;
            Date scadenza;
            bool scaduto;
    };

  8. #8
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    applicaSconto della superclasse non è dichiarato virtual. Se vuoi usare applicaSconto() in modo polimorfico ti serve virtual...

    Hai detto di averlo messo prima... dove lo avevi inserito?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  9. #9
    lo avevo inserito davanti alla dichiarazione del metodo applicaSconto della classe prodotti. come devo fare?

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 © 2025 vBulletin Solutions, Inc. All rights reserved.