Título: C++ PUNTEROS a clases POO Publicado por: ianmorar03 en 6 Septiembre 2018, 10:10 am Tengo un problema a la hora de hacer un programa:
Digamos que quiero insertar objetos dentro de una colección, y en el main, quiero hacer una copia de un objeto a otro, a la hora de cambiar los atributos del nuevo objeto(copia), se cambian los de la original, doy un ejemplo: Código
Cuando yo hago una copia del puntero, al cambiar los valores de la copia, cambian los de la original, como puedo solucionar este problema? Espero me hayan entendido :D Título: Re: C++ PUNTEROS a clases POO Publicado por: CalgaryCorpus en 6 Septiembre 2018, 14:01 pm Asi funcionan los punteros. Son guardadores de las direcciones de memoria de los objetos.
El operador * y el operador -> no hacen mas que visitar las direcciones de memoria, por lo que cuando haces una copia de los punteros, solo haces copia de las direcciones, no de los objetos. Por la misma razon, cuando modificas usando el operador -> estas visitando el mismo objeto para los 2 punteros. Tener 2 punteros apuntando al mismo objeto se llama "alias" y esto que te ocurre es indicador de lo que ya te he explicado. Posible solucion: Crea un constructor de copia y usalo en vez de hacer una asignacion en las lineas 69 y 70. EL constructor de copia es un nuevo constructor que recibe un objeto del mismo tipo que la clase que estas creando. Finalmene, despues de implementar el constructor de copia y reemplazar esas 2 lineas, tu codigo se veria: Código
Sin ningun otro cambio necesario, deberia funcionar. Una convencion que no estas usando es nombrar las clases con mayuscula inicial, intenta seguirlo para hacer mas facil a otros leer tu codigo. Título: Re: C++ PUNTEROS a clases POO Publicado por: MAFUS en 6 Septiembre 2018, 14:51 pm He intentado ejecutar tu código para ayudarte pero, aparte de la falta del constructor copia, faltan arreglar unos cuantos errores. No debería compilarte.
Para saber qué es y qué hace un constructor copia pásate por aquí: http://c.conclase.net/curso/?cap=029#P29_COPIA Aunque he de decirte que, ya que tus objetos están instanciados mediante new, en vez de recibir una referencia en el argumento (que también deberías incluir este constructor), deberás recibir un puntero. Título: Re: C++ PUNTEROS a clases POO Publicado por: ianmorar03 en 6 Septiembre 2018, 17:55 pm Voy a averiguar mas sobre un constructor de copia y vere si funciona
Las clases siempre las uso en mayúsculas, y este código ni siquiera se si compila, lo hice lo mas rapido y sencillo para que me entendieran :P El codigo original es mas complicado, y tiene mucho mas cosas gg Pero muchas gracias de antemano a los 2, @MAFUS y @CalgaryCorpus ;-) Título: Re: C++ PUNTEROS a clases POO Publicado por: MAFUS en 6 Septiembre 2018, 18:25 pm Desde mi ignorancia de C++ hice este código:
Código
Título: Re: C++ PUNTEROS a clases POO Publicado por: ianmorar03 en 6 Septiembre 2018, 18:32 pm Ahora que recuerdo, creo haber visto el constructor de copia
en clases y no estaba prestando atención jaja Utilizare el de copia para dinamico, que estoy utilizando Dinamicos en mi programa Título: Re: C++ PUNTEROS a clases POO Publicado por: Mr.Moonlight en 13 Septiembre 2018, 18:25 pm Siempre que estés trabajando con una clase que use punteros , los más recomendable es crear siempre constructor de copia y sobrecargar el operador de asignación para evitar este tipo de problemas o al menos yo siempre lo entendí así :P
|