Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    98

    [C/C++] Problemi di ereditarietà

    Raga vi spiego subito il mio problema. Ho creato due classi: Personale e Impiegato che è derivata dalla prima. Definisco due metodi di stampa differenti. Quando vado nel main e uso il metodo di stampa, mi funziona quello della Classe Personale e non quello di Impiegato: come mai? Vi posto il codice:
    codice:
    #include "Personale.h"
    #include <string>
    #include <iostream.h>
    
    using namespace std;
    
    int Personale::count_;
    
    Personale::Personale(void)
    {
    
    }
    
    Personale::Personale(string nome, string cognome, int stipendio, int eta):
    nome_(nome), cognome_(cognome), stipendio_(stipendio), eta_(eta)
    {
        matricola_ = count_++;
    }
    
    Personale::~Personale(void) {};
    
    void Personale::setNome(string nome)
    {
        nome_ = nome;
    }
    
    void Personale::setCognome(string cognome)
    {
        cognome_ = cognome;
    }
    
    void Personale::setEta(int eta)
    {
        eta_ = eta;
    }
    
    void Personale::setStipendio(int stipendio)
    {
        stipendio_ = stipendio;
    }
    
    string Personale::getNome() const
    {
        return nome_;
    }
    
    string Personale::getCognome() const
    {
        return cognome_;
    }
    
    int Personale::getEta() const
    {
        return eta_;
    }
    
    int Personale::getMatricola() const
    {
        return matricola_;
    }
    
    int Personale::getStipendio() const
    {
        return stipendio_;
    }
    
    int Personale::getCount() const
    {
        return count_;
    }
    void Personale::stampa()
    {
        cout << "Personale" << endl;
        cout << "Nome:" << nome_.c_str() << "\tCognome:" << cognome_.c_str() << "\tEta':" << eta_
             << "\tStipendio:" << stipendio_ << endl << endl << endl;
    }
    codice:
    #include "Impiegato.h"
    #include <string>
    #include <iostream.h>
    
    using namespace std;
    
    int Impiegato::count3_;
    
    Impiegato::Impiegato(string nome, string cognome, int stipendio, int eta, int bonus):
    Personale(nome,cognome,stipendio,eta)
    {
        bonus_ = bonus;
        count3_++;
    }
    
    Impiegato::~Impiegato(void){};
    
    void Impiegato::setStipendio(int ore)
    {
        stipendio_ = stipendio_ + bonus_;
    }
    
    int Impiegato::getCount3() const
    {
        return count3_;
    }
    void Impiegato::stampa()
    {
        cout << "Impiegato" << endl;
        cout << "Nome:" << nome_.c_str() << "\tCognome:" << cognome_.c_str() << "\tEta':" << eta_
             << "\tStipendio:" << stipendio_ << "\tBonus:" << bonus_ << endl << endl << endl;
    }
    e questo è il main
    codice:
    #include "Personale.h"
    #include "Impiegato.h"
    #include <iostream.h>
    
    void main()
    {
        Personale p[];
        Personale pe1("Riccardo","Rizzo",2000,25), pe2("Lorenzo","Sciala",1000,24);
        Impiegato im1("Lenticchia","Casolino",550,20,50), im2("Alfo","Scialla",1250,19,50);
    p[0] = pe1;
    p[1] = pe2;
    p[2] = im1;
    p[3] = im2;
        for(int i=0; i<4; i++)
        {
            p[i].stampa();
        }
    }

  2. #2
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    Il metodo deve essere virtuale per poterlo "trovare" a runtime.. perchè un oggetto della classe derivata è anche un oggetto della classe base..

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    98
    sisi ho provato anche e ridefinire virtual il metodo stampa nella classe base ma purtroppo il risultato è lo stesso....

  4. #4
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    In tutte e due le classi non solo la base..

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    98
    ho provato ma il risultato è il medesimo...

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.