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

    [C++] Programma corrisponde a richiesta?

    Data questa richiesta:

    "Sfruttando il principio dell'ereditariet�, implementare un applicativo che implementi la classe persona e la sua derivata classe studente mostrando:

    - una sola funzione virtuale con chiamata per polimorfismo a run-time."

    il seguente codice (che viene compilato senza errore), esegue la richiesta del polimorfismo?

    codice:
    #include <iostream>
    using namespace std;
    #define SIZE 50
    // definizione classe persona con funzione virtual pure
    class persona
    {
        virtual void assegna_nome()=0;
    };
    
    
    // classe derivata
    
    
    class studente:public persona
    {
        public:
        char nome[SIZE];
        char cognome[SIZE];
        int matricola;
        void assegna_nome()
        {
            cout<<"Inserire nome studente: ";
            cin>>nome;
            cout<< endl;
        }
    
    
        void assegna_cognome();
        void assegna_matricola();
    };
    
    
    void studente::assegna_cognome()
    {
        cout<<"Inserire cognome studente: ";
        cin>>cognome;
        cout<< endl;
    }
    
    
    void studente::assegna_matricola()
    {
        cout<<"Inserire numero matricola studente: ";
        cin>>matricola;
        cout<< endl;
    }
    int main ()
    {
        studente s;
        s.assegna_nome();
        s.assegna_cognome();
        s.assegna_matricola();
        cout<< "Il nome dello studente in esame e': " << s.nome << " " << s.cognome << ", matricola: " << s.matricola << endl;
        cout<< endl;
        }
    Grazie!
    Ultima modifica di Inesperta; 24-05-2016 a 11:41

  2. #2
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Ad occhio direi di no ....

    Per il polimorfismo dovresti dichiararti un puntatore a classe base (persona) ed assegnargli un oggetto derivato (studente).
    Quando chiami la funzione virtuale, visto che quella base non è definita viene chiamata quella derivata
    Quindi dovrebbe essere una cosa del genere:

    codice:
    int main(){
       persona* p = new studente();
       p->assegna_nome(); // viene chiamata il metodo di studente
    }
    Poi non puoi più fare

    codice:
      p->assegna_cognome();
      p->assegna_matricola();
    Perchè non sono definite per persona...quindi, o le richiami da assegna_nome() oppure assegni tutto (nome, cognome, matricola) dentro il metodo unico

Tag per questa discussione

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.