potete aiutarmi a capire questo?
codice:
#include <iostream>
#include <fstream>
using namespace std;


ofstream outf("alessio.txt");
ifstream inf("alessio.txt");
fstream fboth("alessio.txt");
class classe{
public:
	int a;
	int b;
	classe(int s, int h){a=s; b=h; cout << "ciaof\n";}
	~classe(){ cout << "\ndistruzione\n"; }
	friend ofstream &operator<<(ofstream &fstream, classe obj);



} ;
void main(){
char str;
classe acqua(3,6);
			   				 
if (!outf) cout << "sono molto cattivo\n";
else { 
	outf << "ciao prova"; cout << "stringa scritta\n";
outf << acqua;
	outf.close();
	}

if (!inf) cout << "errore di implicazione logica";
else {	cout << "\nla stringa piu umana del mondo e la: ";
  while(!inf.eof()) { inf >> str;
  cout << str;
  }
 cout << endl;
inf.close();
}
 


}

ofstream &operator<<(ofstream &fstream, classe obj){
	fstream << obj.a;
	fstream << obj.b;
	cout << "operazione svolta con successo\n";
			   return fstream;
	}
in pratica, vorrei che mi spiegaste gentilmente il momento preciso in cui il comp si crea una copia dell'oggetto (e perchè deve farlo?) e perchè l'output mi esce ciaoprova (tutto attaccato, mentre io l'ho scritto staccato...devo usare il gets?) e perchè l'ultimo numero è ripetuto 2 volte...ci sto impazzendo!!