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

Problema con miembros heredados

Estas en el tema de Problema con miembros heredados en el foro de C/C++ en Foros del Web. buenos dias gente! ando con una duda, a ver si alguien puede ayudarme. el tema es que estoy haciendo un programa en C++ utilizando clases. ...
  #1 (permalink)  
Antiguo 12/04/2011, 10:45
Avatar de ehguacho  
Fecha de Ingreso: febrero-2010
Mensajes: 138
Antigüedad: 14 años, 8 meses
Puntos: 4
Problema con miembros heredados

buenos dias gente! ando con una duda, a ver si alguien puede ayudarme.

el tema es que estoy haciendo un programa en C++ utilizando clases. el problema es que no se como acceder desde una subclase a un miembro de una superclase. es decir: se supone que la subclase hereda el miembro desde la superclase, pero no puedo acceder al mismo o, mejor dicho, no me devuelve el valor que deberia devolverme. evidentemente algo estoy haciendo mal.

estas son las implementaciones de clases:

clase "Consola"
Código:
class CConsola
{
    public:
        virtual ~CConsola() { free(RAM); free(VRAM); free(SRAM); }
        BYTE *RAM, *VRAM, *SRAM;

    public:
        inline int LoadCart(char* FileName);
};
clase "P6502"
Código:
class CP6502 : public CConsola
{
    public:
        BYTE A, X, Y, SP;
        BYTE C_FLAG, Z_FLAG, N_FLAG, V_FLAG, B_FLAG, D_FLAG, I_FLAG;
        WORD PC;
        int Ciclos;

    public:
        inline void Reset6502(void);
};
definicion de la funcion "Reset6502"
Código:
inline void CP6502::Reset6502(void)
{
    A = X = Y = 0;
    SP = 0xFD;
    C_FLAG = Z_FLAG = N_FLAG = V_FLAG = B_FLAG = D_FLAG = 0;
    I_FLAG = 1;
    Ciclos = 0;
    PC = (CConsola::RAM[0xFFFD] << 8) | CConsola::RAM[0xFFFC];

    return;
}
ahora bien, cuando muestro el valor del miembro "PC", se muestra "C3E7", cuando en realidad deberia decir "8000". dado el valor observado, asumo que en "PC" se esta almecenando una direccion de memoria, como si de un puntero se tratase, y no es esto lo que en realidad estoy intentando hacer.

lo que necesito es recoger en el miembro "PC" de la subclase "P6502" el valor almacenado en el miembro "RAM[xxxx]" de la superclase "Consola".

cualquier sugerencia/ayuda sera bienvenida y gracias a todos de antemano.
__________________
Cine clásico en descarga directa! http://felliniycia.comule.com
  #2 (permalink)  
Antiguo 13/04/2011, 01:01
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 10 meses
Puntos: 89
Respuesta: Problema con miembros heredados

¿Por qué tienes dos declaraciones publicas en tus clases? Es algo que choca bastante, y más que definas los atributos de una clase como públicos.

Por otro lado, tienes un puntero a BYTE, no un BYTE, tienes que tener eso en cuenta.
  #3 (permalink)  
Antiguo 13/04/2011, 06:39
Avatar de ehguacho  
Fecha de Ingreso: febrero-2010
Mensajes: 138
Antigüedad: 14 años, 8 meses
Puntos: 4
Respuesta: Problema con miembros heredados

los miembros son publicos porque asi necesito que sean.

RAM se inicializa como "RAM = (BYTE *)malloc(xxx)", con lo cual tranquilamente se puede utilizar como un arreglo sin dar ningun tipo de error. toda mi vida utilice los arreglos de memoria para trabajar con archivos de esa manera y jamas me dio un solo error. me parece q el problema viene por el lado de como accedo a los miembros de la clase superior, y no por los tipos de datos. BYTE es el typedef para "unsigned char", si te sirve q te lo diga...
__________________
Cine clásico en descarga directa! http://felliniycia.comule.com
  #4 (permalink)  
Antiguo 13/04/2011, 08:06
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 10 meses
Puntos: 89
Respuesta: Problema con miembros heredados

Eso de que es necesario que sean así, lo dudo. En Programación Orientada a Objetos, uno de sus pilares es precisamente ese, que no sean accesible los atributos de una clase desde fuera de la misma a no ser que sea por medio de métodos getters y setters. Si quieres que sean accesibles desde la clase hija los debes poner como protegidos, pero publicos no. Dicho lo cual, los puedes poner como tu quieras, yo simplemente te digo cuales son las bases de la POO.

No veo ningún problema en la manera de acceder de los atributos heredados, es más, si hubiese algún problema te daría un error. Lo único que se me ocurre es que no le des el valor correctamente y por eso al recuperarlo no es correcto.
  #5 (permalink)  
Antiguo 13/04/2011, 14:24
 
Fecha de Ingreso: junio-2005
Mensajes: 93
Antigüedad: 19 años, 5 meses
Puntos: 9
Respuesta: Problema con miembros heredados

PC = (CConsola::RAM[0xFFFD] << 8) | CConsola::RAM[0xFFFC];

podrias motrar el contendido de ram?, almenos las posiciones que estas utilizando para realizar esta operacion

Etiquetas: Ninguno
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:47.