Ver Mensaje Individual
  #2 (permalink)  
Antiguo 15/01/2016, 02:32
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: Guardar y leer objeto en archivo

Si referidosRegistro no va a tener parte privada te aconsejo usar struct en vez de class. En C++ la única diferencia entre ambos es que la visibilidad por defecto es pública para struct y privada para class. Tu clase podría quedar entonces así:

Código C++:
Ver original
  1. struct referidosRegistro
  2. {
  3.   int numero;
  4.   string bandera;
  5.   string referido;
  6.   string referidoDesde;
  7.   string fechaExpiracion;
  8.   string ultimoClick;
  9.   int clicks;
  10.   float media;
  11.   int fechaExpiracionDias; //calculado
  12.  
  13.   //funcion que toma un getline declarado en creaClaseReferidoRegistro y lo transforma en un array. Tambien llama a la funcion declarador
  14.   void stringToArray(string lineaReferido);
  15.   //funcion que toma el array de la funcion anterior, convierte los tipos necesarios y los asigna como datos de la clase
  16.   void declarador (string _numero, string _bandera, string _referido, string _referidoDesde, string _fechaExpiracion, string _ultimoClick, string _clicks, string _media);
  17. };

Parece una tontería ahorrarse el "public" pero piensa que si la gente ve un struct por motivos históricos entenderá que sus variables internas son públicas... se mejora la legibilidad del código.

Por otro lado, las funciones no necesitan un ';' después de la llave de cierre. Esta característica es exclusiva de clases, estructuras y enumerados.

Y bueno, al lio. Quieres guardar el estado del objeto en un fichero. En C++ no tienes acceso directo a la memoria interna de los objetos (pongamos el string por ejemplo). Esto impide que puedas volcar el contenido de un objeto directamente al disco al estilo de C... si lo haces el fichero acabará almacenando punteros en vez de información útil. Es por este motivo que la única forma de guardar el estado del objeto es guardar cada elemento por separado.

Si vas a usar los streams de C++ puedes sobrecargar los operadores << y >> para almacenar y recuperar los datos del fichero.

Código C++:
Ver original
  1. ostream& referidosRegistro::operator<<(ostream& stream) const
  2. {
  3.   stream << numero << bandera << ...
  4.   return stream;
  5. }
  6.  
  7. istream& referidosRegistro::operator>>(istream& stream)
  8. {
  9.   stream >> numero >> bandera >> ...
  10.   return;
  11. }

Para algún tipo puede que tengas que modificar los flags del stream o hacer un volcado manual (por ejemplo si algún elemento almacena información binaria)... C++ es así y es complicado dar una norma general que se cumpla siempre :)
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.