Salve sto realizzando un programma in cui si vuole realizzare una classe libro. Tra le varie funzioni richieste per implementare tale classe si vuole realizzare l'overloading dell'operatore >> per leggere i dati di un libro da file binario, ma purtroppo a video ottengo solo una serie di numeri...qualcuno mi può aiutare? Un grazie per chi mi darà una mano.
Questo è il codice che stavo scrivendo
codice:
#ifndef LIBRO_H_
#define LIBRO_H_
#include <fstream>
#include <iostream>
using namespace std;
class libro{
private:
char* autore;
char* titolo;
int anno;
public:
libro(const char* a="",const char* t="",const int aa=0)
{autore=new char[strlen(a)+1];strcpy(autore,a);titolo=new char[strlen(t)+1];strcpy(titolo,t);anno=aa;}
libro(const libro &);
const libro & operator=(const libro &);
const char* get_autore()const {return autore;}
const char* get_titolo()const {return titolo;}
int get_anno()const {return anno;}
friend ofstream& operator<<(ofstream&,const libro &);
friend ifstream& operator>>(ifstream&,libro &);
friend ostream& operator<<(ostream&,const libro &);
};
#endif
#include "libro.h"
libro::libro(const libro & L)
{
autore=new char[strlen(L.autore)+1];
strcpy(this->autore,L.autore);
titolo=new char[strlen(L.titolo)+1];
strcpy(this->titolo,L.titolo);
anno=L.anno;
}
ofstream& operator<<(ofstream& ofs,const libro & L)
{
ofs.write((const char*)(L.autore),strlen(L.autore));
ofs.write((const char*)(L.titolo),strlen(L.titolo));
ofs.write(reinterpret_cast<const char*>(&L.anno),sizeof(int));
return ofs;
}
ifstream& operator>>(ifstream& ifs,libro & L)
{
ifs.read((char*)(L.autore),strlen(L.autore));
ifs.read((char*)(L.titolo),strlen(L.titolo));
ifs.read(reinterpret_cast<char*>(&L.anno),sizeof(int));
return ifs;
}
ostream& operator<<(ostream& os,const libro & L)
{
os<<L.autore<<"\n"<<L.titolo<<"\n"<<L.anno<<"\n";
return os;
}
#include <cstdlib>
#include <iostream>
#include "libro.h"
using namespace std;
int main(int argc, char *argv[])
{
libro l;
ifstream in("in.dat");
if(!in) cerr<<"File inesistente\n";
else{
in>>l;
cout<<l;
in.close();}