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

    C++ funzioni virtuali e Aggregazione (has a)

    Ciao a tutti, ho una sitauzione del genere: 2 classi: persona e professore, ognuna in relazione "has a"con la classe esame.
    codice:
    #include <iostream>
    using namespace std;
    
    class esame {
        int voto;
    public:
        virtual void aggiungi_esame () = 0; //questa funzione ha corpi diversi per studente e per professore
    };
    
    class persona{
    protected:
        char nome[10];
    public:
        virtual void registrati () = 0;
    };
    
    class studente:public persona {
        int matricola;
        esame *E;
    public:
        void registrati () {cout<<"registro studente"; }
    };
    
    class professore:public persona{
        char facolta[10];
        esame *E;
    public:
        void registrati () {cout<<"registro professore"; }
    };
    
    int main (){
        char professione;
        persona *ptr;
        
        cout<<"inserisci professione: ";
        cin>>professione;
        if (professione=='p'){
            ptr = new professore;
        }
        else{
            ptr = new studente;
        }
        /*
         Ho 2 aggiungi esame (si chiamano uguali ma compiono operazioni diverse)
         E' POSSIBILE fare un polimorfismo a run time in modo da chiamare solo una volta la aggiungi_esame
         di studente o di professore a seconda del valore di ptr? (dato che in questo momento del programma saprò sempre se e' u professore o uno studente)
         ad ES: ptr->aggiungi_esame() ?
         */
        return 0;
    }
    Ho 2 aggiungi esame (si chiamano uguali ma compiono operazioni diverse).
    E' POSSIBILE fare un polimorfismo a run time in modo da chiamare solo una volta la aggiungi_esame di studente o di professore a seconda del valore di ptr?
    ad ES: ptr->aggiungi_esame() ?

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Non è che sia molto chiaro.

    Questa funzione aggiungi_esame dove dovrebbe stare?

    Hai scritto
    ptr->aggiungi_esame()
    però poi il prototipo è nella classe esame come metodo virtuale,

    Tu scrivi la funzione come se esistesse (sia la definizione che il corpo)
    poi lasci il corpo vuoto e metti i commenti lì, altrimenti imho non si capisce.

  3. #3
    la aggiungi_esame dovrebbe stare nella classe esame,

    vorrei che la classe esame gestisse gli esami di tutti.. abbia cioè le variabili e le funzioni utili per gli esami.

    Pero queste funzioni sono diverse a seconda se a chiamarle e' il professore o lo studente (per esempio, per lo studente aggiungere un esame significa prenotarsi, per il professore significa creare un nuovo evento di esame (con tanto di aula, orario e data).
    Certo, potrei gestire tutto con degli if (o switch - -case) ma dato che esistono queste funzioni virtual che possono essere ridefinite , volevo usare quelle...

    insomma questa era l'idea che era venuta a me.. ma se ti viene in mente un idea migliore dimmi pure ... l'importante e' avere una persona che partorisce un prof e uno studente. E poi avere una classe esame in relazione: studente e professore "has a" esame

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    IMHO stai facendo qualche errore di fondo.

    Metti aggiungi_esame in una classe che si chiama esame?

    O è sbagliato il nome della classe (forse rappresenta qualcos'altro che non è il singolo esame) o il metodo non dovrebbe stare lì.

    È come se nella classe "persona" mettessi un metodo "aggiungi_persona", o nella classe "studente" un metodo "aggiungi_studente" non ha senso.

  5. #5
    ?? perchè non ha senso fare così ?

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Una classe ha dei metodi per interagire con le altre classi ma non con se stessa.
    esame->aggiungi_esame
    mi sembra abbastanza palese che non ha senso.

    Capisco:
    corso_di_studi->aggiungi_esame(esame)
    studente->aggiungi_esame(esame)

    ma non:
    esame->aggiungi_esame(esame)

  7. #7
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    Ogni esame è organizzato da un professore.Gli studenti si iscrivono per cui ci sono n studenti, un professore e un esame.
    Per cui il metodo aggiungi_esame() fallo alla classe professore.

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Diciamo che ci potrebbero essere più vector<Esame> nel programma.
    Uno in professore, per gli esami di cui si occupa, uno in studente per gli esami che ha sostenuto, ... ecc...

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.