Visualizzazione dei risultati da 1 a 3 su 3

Discussione: overloading in c++

  1. #1

    overloading in c++

    Per effettuare l' overlodaing dell' operatore << e >> per formattare lo stream di input e output ho un programmino che funziona finkè dikiaro le variabili della classe come pubbliche....se provo a rendere le variabili private e rendendo l' operatore di overloding FRIEND, il programma non funziona +....ho urgentissimo bisogno di un aiuto causa esame...ma forse è meglio postare il codice:

    #include <iostream>

    using namespace std;

    class messaggi {
    private:
    char nome[20];
    char cognome[20];

    public:

    void inserisci();

    ostream& operator<<(ostream ,messaggi &);
    istream& operator>>(istream& ,messaggi &);
    };

    void messaggi::inserisci(){
    messaggi g;
    cout << "Inserisci nome e cognome" <<endl;
    cin >>g;
    cout <<g<<endl;
    }

    ostream& operator<<(ostream uscita,messaggi &vaio){
    uscita<<vaio.nome<<' '<<vaio.cognome;
    return uscita;
    }

    istream& operator>>(istream& ingresso,messaggi &ciao){
    ingresso>>ciao.nome>>ciao.cognome;
    return ingresso;
    }

    void main(){
    messaggi vai;

    vai.inserisci();
    // cout <<"Sei un grande"<<endl;
    }


    Se rendo NOME e COGNOME privati, come devo modificare il mio programma affinkè contiunui a funzionare ?
    www.fulleffect.it
    Il miglior sito hip hop in Italia.

    FAIEL aka Raffaele Madaro
    FORZA BARI !!

  2. #2
    Utente bannato
    Registrato dal
    Sep 2003
    Messaggi
    1,012
    Appunto devi dichiarare la 2 funzioni come friend!
    codice:
    #include <iostream>
    
    using namespace std;
    
    class messaggi {
    private:
    char nome[20];
    char cognome[20];
    
    public:
    
    void inserisci();
    
    friend ostream& operator<<(ostream ,messaggi &);
    friend istream& operator>>(istream& ,messaggi &);
    };
    
    void messaggi::inserisci(){
    messaggi g;
    cout << "Inserisci nome e cognome" <<endl;
    cin >>g;
    cout <<g<<endl;
    }
    
    ostream& operator<<(ostream uscita,messaggi &vaio){
    uscita<<vaio.nome<<' '<<vaio.cognome;
    return uscita;
    }
    
    istream& operator>>(istream& ingresso,messaggi &ciao){
    ingresso>>ciao.nome>>ciao.cognome;
    return ingresso;
    }
    
    void main(){
    messaggi vai;
    
    vai.inserisci();
    // cout <<"Sei un grande"<<endl;
    }
    il tuo codice era una contraddizione: le due funzioni non erano ne friend, ne membri (a metà).

    P.S. Usa i tag [ CODE], vedi regolamento

  3. #3
    Per essere sinceri il codice che avevo postato funziona correttamente, l' unico problema era la dchiarazione delle librerie che con visual studio 6 fa un pò di conflitti, quindi bisogna esplicitare:
    using std:stream;
    using std::istream;
    using std::cin;
    using std::cout;
    using std::endl;
    Chiuso questo discorso, il mio problema ora è un altro:
    Se introdussi una nuova classe ereditata dalla classe messaggi che chiameremo messaggi2 e che contiene solo un attributo privato al suo interno, cioè:
    class messaggi2 : public messaggi{
    private:
    char indirizzo[50];
    }

    Come faccio a questo punto ad usare l' overloadin per estrapolare i dati nome, cognome ed anke indirizzo ????
    www.fulleffect.it
    Il miglior sito hip hop in Italia.

    FAIEL aka Raffaele Madaro
    FORZA BARI !!

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.