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

duda hacer referencia en objetos

Estas en el tema de duda hacer referencia en objetos en el foro de C/C++ en Foros del Web. Hola buenas, haciendo mi programa me he visto en vuelto en una pequeña duda que nose si se puede o como se puede hacer. Tengo ...
  #1 (permalink)  
Antiguo 21/02/2013, 06:10
vib
 
Fecha de Ingreso: marzo-2011
Mensajes: 43
Antigüedad: 13 años, 1 mes
Puntos: 0
duda hacer referencia en objetos

Hola buenas, haciendo mi programa me he visto en vuelto en una pequeña duda que nose si se puede o como se puede hacer.
Tengo por ejemplo 2 objetos:

clase almacen,
clase material

cuando creo 1 material, 1 parte del objeto "ya que tiene herencias " se va hacia almacen... deberia ir en forma de referencia...me explico
el almacen solo guarda el material, y lo muestra, pero todos los calculos de material logicamente los hace la clase material
ok
Una vez creo las clases, y material la meeto en almacen, como puedo hacer para si canvio la clase material se canvie automaticamente la referencia echa en almacen?

la tengo asi
c
Código:
class almacen:
{
void llenar(material &m)
v.push_back(m);
}

int main()
{
     almacen m;
    material mat;
    m.llenar(mat);

}
pero no me canvia nada nose si esque no lo hago bien o tengo otros fallos de codigo!

gracias!
  #2 (permalink)  
Antiguo 22/02/2013, 12:03
 
Fecha de Ingreso: febrero-2003
Ubicación: D.F.
Mensajes: 163
Antigüedad: 21 años, 2 meses
Puntos: 22
Respuesta: duda hacer referencia en objetos

Hola, si estás manejando los materiales a través de vectores (vector<material>) lo que realmente estás almacenando en el vector son copias de los objetos originales, por lo tanto no verás cambios reflejados, lo que necesitas es utilizar un vector de punteros (vector<material*>).

Por lo que se puede ver eso creo que debe estar pasando, sino trata de poner código que aclare un poco más el problema.

Saludos.
  #3 (permalink)  
Antiguo 23/02/2013, 18:08
vib
 
Fecha de Ingreso: marzo-2011
Mensajes: 43
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: duda hacer referencia en objetos

vale, osea los parametros los paso igual por referencia....pero el vector lo creo
vector<anim*>tal
no?
luego si modifico el objeto inicial se modificaria asi en el vector?
tiene algo de especial hacer el vector de punteros? porque jamas lo he tocado..o funciona igual o canvia a la hora de poner valores etc?
  #4 (permalink)  
Antiguo 24/02/2013, 08:32
 
Fecha de Ingreso: febrero-2003
Ubicación: D.F.
Mensajes: 163
Antigüedad: 21 años, 2 meses
Puntos: 22
Respuesta: duda hacer referencia en objetos

Cita:
vale, osea los parametros los paso igual por referencia....pero el vector lo creo vector<anim*>tal no?
luego si modifico el objeto inicial se modificaria asi en el vector?
Así es.

Cita:
tiene algo de especial hacer el vector de punteros? porque jamas lo he tocado..o funciona igual o canvia a la hora de poner valores etc?
No hay nada especial, únicamente que el tipo de dato que estás almacenando es un puntero (debes insertar las direcciones de tus objetos).
  #5 (permalink)  
Antiguo 24/02/2013, 15:03
vib
 
Fecha de Ingreso: marzo-2011
Mensajes: 43
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: duda hacer referencia en objetos

vale probare haer si asi se queda solucionado y lo comento..

pero un vector de punteros se tiene de declarar?
si hiciera

int *p;
p=new int;
en vector igual?

vector<int*>p;
ya podria hacer p.push_back(2);

??S:
  #6 (permalink)  
Antiguo 25/02/2013, 12:39
 
Fecha de Ingreso: febrero-2003
Ubicación: D.F.
Mensajes: 163
Antigüedad: 21 años, 2 meses
Puntos: 22
Respuesta: duda hacer referencia en objetos

A ver si el siguiente ejemplo aclara un poco, son dos vectores (int e int*), con el primero no puedo modificar los valores originales:

Código C++:
Ver original
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4.  
  5.  
  6. int main(){
  7.     int a = 1;
  8.     int b = 2;
  9.     int c = 3;
  10.  
  11.     vector<int> v1;
  12.     v1.push_back(a);
  13.     v1.push_back(b);
  14.     v1.push_back(c);
  15.  
  16.     v1[0] = 10;
  17.     v1[2] = 20;
  18.     v1[3] = 30;
  19.  
  20.     cout << a << " " << b << " " << c << endl;
  21.  
  22.     vector<int*> v2;
  23.     v2.push_back(&a);
  24.     v2.push_back(&b);
  25.     v2.push_back(&c);
  26.  
  27.     *v2[0] = 10;
  28.     *v2[1] = 20;
  29.     *v2[2] = 30;
  30.  
  31.     cout << a << " " << b << " " << c << endl;
  32.  
  33.     return 0;
  34. }
  #7 (permalink)  
Antiguo 27/02/2013, 09:13
vib
 
Fecha de Ingreso: marzo-2011
Mensajes: 43
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: duda hacer referencia en objetos

genial me viene este ejemplo!
te agradezco mucho tu ayuda!!! gracias!!!
  #8 (permalink)  
Antiguo 01/03/2013, 12:25
vib
 
Fecha de Ingreso: marzo-2011
Mensajes: 43
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: duda hacer referencia en objetos

EDITO:ERROR RESUELTO
NO me acordaba que para acceder a los datos de una direccion era: v_element[0]->getz();
Si teneis alguna manera mejor podeis comentarla sino, lamento las molestias de este ultimo post

Lamento abrir de nuevo el tema, pero han surgido unos problemas que me imagino que debe ser de conceptos pero no acabo de encontrar la solucion.
Con el ejemplo todo va genial, el vector tiene la ruta de la variable guardada, accedo a ella y la modifico y se modifica todo ok
el problema es cuando el vector guarda la ruta de un objeto.
muestro codigo
Cita:
class general:
vector<animacion*>v_element;//guarda los datos de animacion, es el padre de las herencias de //los elementos guardados
void llenar_elemento(animacion&e)
{
v_element.push_back(&e);//guarda la ruta de la animacion
*v_element[0].getz();//intento canviar algun valor desde el vector ni no me deja de ninguna //manera
cout <<"int "<<&e<<" vector "<<v_element[0]<<endl; //muestra las direciones pero
//no hay forma de ver las variables del contenido animacion desde vector
}
Eso es lo que me falla... desde la ruta guardada a vector no logro ver las variables de animacion, ni modificarlas me da error de compilacion he probado ponerlas
*v_element[0].getz();
v_element[0].getz();
&v_element[0].getz();
v_element[0].*getz();
v_element[0].&getz();
ni idea :S
getz() devuelve un entero con 1 valor.

gracias

Última edición por vib; 01/03/2013 a las 12:37
  #9 (permalink)  
Antiguo 01/03/2013, 16:19
 
Fecha de Ingreso: diciembre-2011
Ubicación: Crespo - Entre Rios
Mensajes: 155
Antigüedad: 12 años, 4 meses
Puntos: 25
Respuesta: duda hacer referencia en objetos

recorda que ahora estas trabajando con punteros, entonces, tenes que usar la flecha "->" para acceder a alguna atributo o metodo de a clase animacion

Código C++:
Ver original
  1. class general:
  2. vector<animacion*>v_element;//guarda los datos de animacion, es el padre de las herencias de //los elementos guardados
  3. void llenar_elemento(animacion&e)
  4. {
  5. v_element.push_back(&e);//guarda la ruta de la animacion
  6. v_element[0]->getz();
  7. cout <<"int "<<&e<<" vector "<<v_element[0]<<endl; //muestra las direciones pero
  8. //no hay forma de ver las variables del contenido animacion desde vector
  9. }

Etiquetas: int, objetos, programa, referencia
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 17:23.