Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 35

Discussione: [c++] file e classi

  1. #1

    [c++]file e classi

    non riesco a salvare su file oggetti di classe da me creata,come posso fare???

    ad esempio ho creato una classe libro,poi edito:

    libro libro1;
    ofstream f2("archivio",ios::app);
    f2<<libro1; //qui sorge il problema perche' l'operator << non e' definito per class libro
    f2.close();

  2. #2
    Utente di HTML.it L'avatar di Angioletto
    Registrato dal
    Jan 2004
    Messaggi
    1,246
    bisogna ridefinire l'operatore >> !!

    codice:
     
    struct Articolo {
      char* nome;
      char* misura;
      int quantita;
    };
    
    typedef Articolo* PArt;
    
    istream& operator >> (istream& in, PArt p) 
    {
      char temp[80];
      cout << "Nome dell'articolo: ";
      in >> temp;
      p->nome = new char[strlen(temp)+1];
      strcpy(p->nome, temp);
      cout << endl;
      
      cout << "Quantita' da comprare: ";
      in >> p-> quantita;
      cout << endl;
    
      cout << "Unita' di misura: ";
      in >> temp;
      p->misura = new char[strlen(temp)+1];
      strcpy(p->misura, temp);
      cout << endl;
                  
      return in;
    } 
    
    ostream& operator << (ostream& out, const PArt p)
    {
      out << p->quantita << " " << p->misura << " di " << p->nome << endl << endl;
      return out;
    }
    Ti va bene come esempio??
    Per liquidare un popolo si comincia con il privarli della memoria.Si distruggono i loro libri, la loro cultura, la loro storia. E qualcun’ altro scrive loro altri libri, li fornisce di un’altra cultura, inventa per loro un’altra storia. (Milan Kundera)

  3. #3
    ma e' necessario l'utilizzo dell'operatore -> ?

    non ne conosco l'uso....

  4. #4
    Utente di HTML.it L'avatar di Angioletto
    Registrato dal
    Jan 2004
    Messaggi
    1,246
    conviene che impari ad usarlo..
    Nel main del programma si definirà una istanza del Record Articolo (avrai dunque occupato spazio in memoria)

    codice:
    Articolo a;
    Ci sono vari modi per accedere ai campi di tale record..
    codice:
    a.nome;
    a.misura;
    a.quantita;
    Penso che tu conosci questo tipo di funzione di accesso. Nel nostro caso trattiamo il Record Articolo attraverso dei puntatori: conviene sempre quando l'oggetto in memoria ha una certa estensione in memoria!!)

    codice:
    Articolo a;
    typedef Articolo* PArt;
    PArt p;
    p=&a;
    Ecco come attraverso i puntatori si può accedere ai campi del Record:

    codice:
    (*p).nome;
    p->nome;
    Questa notazione è molto comoda, in quanto "letteralmente" ti dice che stai puntando al campo nome (in p c'è sempre l'indirizzo di a!!)

    A presto!!!
    Per liquidare un popolo si comincia con il privarli della memoria.Si distruggono i loro libri, la loro cultura, la loro storia. E qualcun’ altro scrive loro altri libri, li fornisce di un’altra cultura, inventa per loro un’altra storia. (Milan Kundera)

  5. #5
    ho risolto il problema del salvataggio ma ora rimane il grande problema della lettura del file:

    per esempio se il mio oggetto libro ha tre campi(char[] autore,char[] titolo,int anno)e ci ho inserito manzoni,promessi sposi,1647 sul file viene salvato:

    manzonipromessi sposi1647

    come posso leggere il file in modo di mandare i vari campi al loro giusto posto in un oggetto di classe libro??

  6. #6
    Utente di HTML.it L'avatar di Angioletto
    Registrato dal
    Jan 2004
    Messaggi
    1,246
    è un problema che ancora non mi è capitato..posso provare a darti qualche idea..

    pensavo di salvare i vari dati con dei ritorni a capo ("/t" mi sembra), poi bisognerebbe trovare la giusta funzione che legge i caratteri fino a quell'operatore (cin.get, cin.getline, etc etc), ma non so quale possa essere quella funzione..e infine ridefinire l'operatore di ingresso per adattarlo alla lettura da file..

    non so, è la prima idea che mi è venuta in mente.

    una volta letti i dati potresti poi darli in pasto ad un costruttore con parametri dell'oggetto libro...

    dimmi un pò che ne pensi!!

    purtroppo sto appresso ad un altro esame, se no avrei provato a fare sta cosa!!!

    Ciao!!
    Per liquidare un popolo si comincia con il privarli della memoria.Si distruggono i loro libri, la loro cultura, la loro storia. E qualcun’ altro scrive loro altri libri, li fornisce di un’altra cultura, inventa per loro un’altra storia. (Milan Kundera)

  7. #7
    anche io avevo pensato qualcosa del genere,provero' cosi' poi ti sapro' dire...

  8. #8
    mi e' venuto un dubbio:ma esiste la funzione getline nella classe istream??

  9. #9
    Utente di HTML.it L'avatar di Angioletto
    Registrato dal
    Jan 2004
    Messaggi
    1,246
    ho provato una cosa del genere, ma non ho avuto molto tempo per perfezionarla..
    while ( (infile>>s)!='\0' )
    dove infile è il nome interno che ho dato ad un file aperto per sola lettura..
    la lettura termina quando trova il tappo (\0), dovrebbe accadere la stessa cosa se ovviamente al posto del tappo metti qualche altra cosa, ad esempio il \t di cui parlavamo l'altra volta..

    il problema che ho è un'altro: come faccio a dire al programma che alcune stringhe deve inserirle in una variabile e altre in variabili diverse?? cioè, magari il primo inserimento va bene, ma poi come gli dico di spostarsi sulle altre stringhe??

    non so se mi sono spiegato bene..cmq penso che incontrerai cmq qst problema..mah!!!

    speriamo sia + semplice di quanto io creda..

    ciao!!
    Per liquidare un popolo si comincia con il privarli della memoria.Si distruggono i loro libri, la loro cultura, la loro storia. E qualcun’ altro scrive loro altri libri, li fornisce di un’altra cultura, inventa per loro un’altra storia. (Milan Kundera)

  10. #10
    ma dove lo inserisci

    while ( (infile>>s)!='\0' ) ??

    funziona? hai provato?


    per il problema che dici tu non e' difficile,se tu riesci a farlo leggere fino al punto che vuoi(\n,\o...)poi se non chiudi lo stream di input e fai partire una nuova lettura la nuova lettura partira'da dove si e' fermata l'altra...capito??

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.