• Lunes 29 de Abril de 2024, 05:14

Autor Tema:  Paso Vector por refernecia  (Leído 1344 veces)

neg1414

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Paso Vector por refernecia
« en: Sábado 25 de Abril de 2009, 13:37 »
0
Buenas..

  MI problema es el siguiente Tengo dos clases : clase1, Clase2

  En la primera clase creo un array booleano de 3 elementos

Citar

 Clase1
 {
 bool VectorOPadre[3];
 }

  Este vector lo paso como parametro a un procedimiento de la clase2
Citar
Clase2
 {
  ProcedEnClase2(VectorPadre);
 }
 
  En la clase 2  el procedimiento recibe el vectorPadre como parametro,lo modifica y al ser un paso por referencia esos cambios se plasman en VectorPadre una vez vuelvo a Clase1;

Citar
Clase2
 {
     ProcedEnClase2(bool Vect[]);
      {
         Vect[0]=true;
         Vect[1]=true;
         Vect[2]=true;
      }
}

Hasta aqui todo bien mi problema surge cuando, En la clase2 trabajo con el vector pasado desde clase1 en otros procediminetos,Obviamente me da un error por que la variable pasada es Local,solo puedo trabajar con ella en el procedimiento que la recibe como parametro..
Como solucion pense en crear una vector booleano variable Goblal
Citar
Clase2
{
   bool VectorGlobal[3]
}

Inicializarlo  apuntando este  a la direccion de comienzo del Vector pasado como referencia (VectorPadre) con lo cual al modificar el VectorGlobal estory modificando VectorPadre.He probado con

Citar
    ProcedEnClase2(bool Vect[]);
      {
         VectorGlobal=Vect;

         VectorGlobal=&Vect

         *VectorGlobal=&Vect
      }


No hay Manera Laguna Idea  Gracias

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Paso Vector por refernecia
« Respuesta #1 en: Sábado 25 de Abril de 2009, 16:15 »
0
Y si en lugar de hacer tanta historia usas un puntero ...

Código: C++
  1. #include <stdio.h>
  2.  
  3. class Clase1
  4. {
  5. public:
  6.   Clase1()
  7.   {
  8.     VectorOPadre[0] = false;
  9.     VectorOPadre[1] = false;
  10.     VectorOPadre[2] = false;
  11.   }
  12.   bool VectorOPadre[3];
  13. };
  14.  
  15. class Clase2
  16. {
  17. public:
  18.   void ProcedEnClase2(bool *Vect)
  19.   {
  20.     Vect[0]=true;
  21.     Vect[1]=true;
  22.     Vect[2]=true;
  23.     v = Vect;
  24.   }
  25.   bool *v;
  26. };
  27.  
  28. void main()
  29. {
  30.   Clase1 p;
  31.   printf("%d - %d - %drn", p.VectorOPadre[0], p.VectorOPadre[1], p.VectorOPadre[2]);
  32.   Clase2 d;
  33.   d.ProcedEnClase2(p.VectorOPadre);
  34.   printf("%d - %d - %drn", p.VectorOPadre[0], p.VectorOPadre[1], p.VectorOPadre[2]);
  35. }
  36.  

Ahi en d.v tenes un puntero a p.VectorOPadre ...

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

neg1414

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Re: Paso Vector por refernecia
« Respuesta #2 en: Sábado 25 de Abril de 2009, 17:39 »
0
Gracias por Contestar....

Al final lo He Hecho de la siguiente manera


Citar
Clase1
 {
    bool VectorPadre[3]
 
    ProcedEnClase2(VectorPadre);

 }


Código:
Citar
Clase2
 {
   
    //Declaro Variable Global

    bool*  VectorPuntero[3]
   ......................................

   ProcedEnClase2(bool Vect[])
     {
         *VectorPuntero = &Vect[0];
     }


Sea donde sea en la Clase2 si asigno datos a la matriz VectorPuntero
de la forma:
Código:

 
Citar
   (*VectorPuntero)[0]=true;


Estas Modificaciones se veran relflejadas en VectorPadre de la clase1

PosData: No creo que sea " hacer tantas Historias"

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Paso Vector por refernecia
« Respuesta #3 en: Sábado 25 de Abril de 2009, 18:01 »
0
Hacelo como quieras para mi seguis haciendo historias, bool* VectorPuntero[3]; es un array de tres punteros a bool ...

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.