Foros del Web » Programación para mayores de 30 ;) » Programación General »

modificar variables dentro de la clase principal en C++

Estas en el tema de modificar variables dentro de la clase principal en C++ en el foro de Programación General en Foros del Web. Hola. Tengo un problema medio extraño. Como ya sabran algunos tengo un programa que tiene una clase principal y 2 derivadas de esta. Bueno, el ...
  #1 (permalink)  
Antiguo 20/06/2005, 16:57
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
modificar variables dentro de la clase principal en C++

Hola. Tengo un problema medio extraño.

Como ya sabran algunos tengo un programa que tiene una clase principal y 2 derivadas de esta. Bueno, el problema es que en el main hago esto:

d_class1 c1;//primer derivada
d_class2 c2;//segunda derivada
//Mas no creo una clase principal

Bueno, pues ya cuando se empizan a ejecutar las funciones miembro, ocurre algo que me costo bastante tiempo de depuracion descubrirlo.

En la clase principal tengo un array que modifican las funciones de las clases derivadas, el problema es que como que se borra el contenido del array.

En la primera clase derivada escrbo cosas en este array, y luego en la segunda clase derivada una funcion miembro tiene que leerlo, pero al leerlo, me da puros 0.
Por que se borra?
Como le hago para que no se borra?

Saludos
  #2 (permalink)  
Antiguo 21/06/2005, 01:25
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Seguramente tal como lo tenes cada una de los objetos tiene su propio array al que solo puede acceder el mismo, declara el array como estatico asi es compartido por todos los objetos.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 21/06/2005, 01:32
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Aca tenes un ejemplo, lo que hace es crear dos instancias de clases derivadas de padre (hermano e hijo), cambiar el valor de los indices 0 y 1 de un array y ver el valor que ocupan en el otro objeto.
La primera vez que lo pruebes vas a ver que la salida por pantalla no muestra los que especifica el programa, descomenta esas dos lineas y cuando lo vuelvas a probar si seran 0x2020 y 0x4040 los valores que veras por pantalla.

Código:
#include <windows.h>
#include <stdio.h>

class padre
{
  public:
    padre()
    {
    }
    /*static*/ DWORD funcs[20];
};

//DWORD padre::funcs[20];

class hijo : public padre
{
  public:
  hijo()
  {
  }
};

class hermano: public padre
{
  public:
  hermano()
  {
  }
};

void main()
{
  hijo juan;
  hermano jose;
  juan.funcs[0] = 0x2020;
  juan.funcs[1] = 0x4040;
  printf("0x%X\r\n", jose.funcs[0]);
  printf("0x%X\r\n", jose.funcs[1]);
}
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #4 (permalink)  
Antiguo 21/06/2005, 10:09
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Si. Habia sacado ese array de la clase y lo habia puesto como global y externo mientras para probar, pero me parece mejor tu solucion.

Gracias
  #5 (permalink)  
Antiguo 08/07/2005, 17:10
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Hola. Regrese al post porque tengo una duda mas sobre esto.

Al intentar usar variables estaticas me dan errores.

El problema es este:

Cita:
class padre
{
protected:
static a;
public:
padre()
{
a=1;
}
};

class hijo
{
public:
void mostrar(void)
{
printf("%d", a);
}
};
Y pues con esto se supone que debe ya de mostrarme 1 al llamar a la funcion miembro de hijo, pero me da errores al linkearlo, errores como:

unresolved external symbol "protected: static int padre::i" (?i@padre@@1HA)

Como que no me detecta las variables estaticas.
alguien sabe porque?
Que puede estar mal?

Saludos
  #6 (permalink)  
Antiguo 09/07/2005, 00:38
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Si te fijas en el ejemplo que te di te vas a dar cuenta que TAMBIEN hay que declarar la variable fuera de la clase.

Asi funciona:

Código:
#include <windows.h>
#include <stdio.h>

class padre
{
  protected:
  static a;
  public:
  padre()
  {
    a=1;
  }
};

int padre::a;

class hijo : padre
{
  public:
  void mostrar(void)
  {
    printf("%d", a);
  }
};

void main()
{
  hijo gil;
  gil.mostrar();
}
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #7 (permalink)  
Antiguo 09/07/2005, 10:43
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Ok gracias.
  #8 (permalink)  
Antiguo 09/07/2005, 10:52
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
De nadas
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
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 13:42.