Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Autoincrementar el atribuno de una clase cada vez que se genara un objeto de la misma

Estas en el tema de Autoincrementar el atribuno de una clase cada vez que se genara un objeto de la misma en el foro de C/C++ en Foros del Web. Muy Buenas a todos una vez más! En esta oportunidad, luego de darle mil vueltas decido pedirles ayuda porque nadie va a inventar el agua ...
  #1 (permalink)  
Antiguo 08/02/2014, 05:07
 
Fecha de Ingreso: mayo-2010
Mensajes: 12
Antigüedad: 14 años, 6 meses
Puntos: 0
Pregunta Autoincrementar el atribuno de una clase cada vez que se genara un objeto de la misma

Muy Buenas a todos una vez más!

En esta oportunidad, luego de darle mil vueltas decido pedirles ayuda porque nadie va a inventar el agua tibia asi que alguien ya debió haberlo hecho y tal vez sea un tonteria que yo no veo.

En fin, tengo una clase llamada Rent, que sirve para generar objetos de una renta de vehiculos. Me mandan a declarar un atributo tipo INT llamado RentNo para el numero de factura o alquiler y otro tambien INT llamado LastReno, inicializado en 0. Este ultimo debe ser la referencia para el primero. Auntoincrementarse al generar un objeto de la clase Rent y de esta manera indicar el numero de alquiler o factura a imprimir.

Código C++:
Ver original
  1. Cass Rent{
  2. protected:
  3.     int rentNo;
  4.     timepoint from, to;
  5.     Vehicle *vehicle;
  6.     Driver *driver;
  7.     Rent *next;
  8.     int lastReno = 0; // Aqui falta
  9. public:
  10.     Rent(int rN, timepoint fr, timepoint t, Vehicle *v, Driver *d, Rent *n) : rentNo (rN), from(fr), to(t), vehicle(v), driver(d), next(n){} //Aqui falta algo
  11.     timepoint get_from(){
  12.         return from;
  13.     }
  14.     timepoint get_to(){
  15.         return to;
  16.     }
  17.     Rent get_next(){
  18.         return *next;
  19.     }
  20.     void set_from (timepoint c){
  21.         from = c;
  22.     }
  23.     void set_to (timepoint d){
  24.         to = d;
  25.     }
  26.     virtual void print(){
  27.     cout << "VEHICLE RENT" << endl << "RentNo: " << rentNo << endl << "Vehicle: ";
  28.     vehicle->print();
  29.     cout << endl << "From: " << from << endl << "To: " << to << endl << "Driver: " << *driver << endl << endl;
  30.     }
  31. };

Y aqui el main:

Código C++:
Ver original
  1. int main(){
  2.  
  3. Rent *r3, r1(1,t1,t2,vehicle[2],&d1,0),r2(2,t3,t4,vehicle[n],d3,&r1),r4(3,t3,t4,vehicle[3*n],d4,&r2);
  4.    return 0;
  5. }

Los demas atributos que ven, algunos son generados por otras clases. No considero necesario poner todo el codigo porque es un poco largo pero si lo consideran necesario lo copiare.

En estos momentos estoy pasando yo como primer atributo el numero de alquiler o factura a r1, r2 y r4, con 1, 2 y 3 respectivamente.

La cuestion es que debe hacerlo automaticamente.

Muchas gracias por su ayuda de antemano.

Erika
  #2 (permalink)  
Antiguo 08/02/2014, 07:49
 
Fecha de Ingreso: mayo-2010
Mensajes: 12
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Autoincrementar el atribuno de una clase cada vez que se genara un objeto

Dejo la Solucion por si alguien la necesita:

Código C++:
Ver original
  1. class Rent{
  2. protected:
  3.     int rentNo;
  4.     timepoint from, to;
  5.     Vehicle *vehicle;
  6.     Driver *driver;
  7.     Rent *next;
  8.     static int lastRent;
  9. public:
  10.     Rent(timepoint fr, timepoint t, Vehicle *v, Driver *d, Rent *n) : from(fr), to(t), vehicle(v), driver(d), next(n){
  11.     Rent::lastRent = 0;
  12.     rentNo = lastRent+1;
  13.     }
  14.     timepoint get_from(){
  15.         return from;
  16.     }
  17.     timepoint get_to(){
  18.         return to;
  19.     }
  20.     Rent get_next(){
  21.         return *next;
  22.     }
  23.     void set_from (timepoint c){
  24.         from = c;
  25.     }
  26.     void set_to (timepoint d){
  27.         to = d;
  28.     }
  29.     virtual void print(){
  30.     rentNo = 1+lastRent++;
  31.     cout << "VEHICLE RENT" << endl << "RentNo: " << rentNo << endl << "Vehicle: ";
  32.     vehicle->print();
  33.     cout << endl << "From: " << from << endl << "To: " << to << endl << "Driver: " << *driver << endl << endl;
  34.     }
  35. };
  36. int Rent::lastRent = 0;

El main es el mismo.

:)
  #3 (permalink)  
Antiguo 08/02/2014, 12:17
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 16 años, 5 meses
Puntos: 61
Respuesta: Autoincrementar el atribuno de una clase cada vez que se genara un objeto

Un resumen de la solución es que se tiene que utilizar miembros static. (Linea 8)

Hay algunos problemas con el codigo.
Algunos evidentes:
- El main del primer post no funciona con el codigo mostrado en el segundo, a pesar que se dice que "el main es el mismo", no deberia ser asi, pues el constructor de la clase Rent no calza con la definicion de las variables creadas en el main.
- Llevar a 0 el miembro static cada vez que se crea un objeto (Linea 11) no es correcto. Solo se tiene que hacer 1 vez (Linea 36)
- Se deberia incrementar ese miembro static en el constructor, no en la instruccion de print (Linea 30).
__________________
Visita mi perfil en LinkedIn
  #4 (permalink)  
Antiguo 08/02/2014, 13:31
Avatar de nup_  
Fecha de Ingreso: noviembre-2010
Mensajes: 265
Antigüedad: 14 años
Puntos: 32
Respuesta: Autoincrementar el atribuno de una clase cada vez que se genara un objeto

y solo queda mencionar q la implementación no es thread safe
http://es.wikipedia.org/wiki/Seguridad_en_hilos
;)

Etiquetas: cada, clase, clases, int, numero, objeto, vez
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:01.