[C con Clase] acceso a datos en funciones heredadas

Steven Davidson steven en conclase.net
Jue Feb 22 04:18:21 CET 2007


Hola Alan,

El pasado 2007-02-22 02:24:19, alan escribió:

a> Hola amigos en primer lugar quiero agradecer a todos los que me han ayudado hasta ahora en mis preguntas anteriores.
a> Mi pregunta ahora es:
a> Tengo lo siguiente
a> typedef struct stDATOS_A
a> {  char nomb[30];
a>    int edad;
a> } DATOS_A;
a> typedef struct stDATOS_B
a> {  char nomb[30];
a>    float estatura;
a> } DATOS_B;

Por cierto, bajo C++, no es necesario usar un 'typedef' para estructuras. Bajo C, esto sí es lo que se suele hacer, pero innecesario bajo C++. Simplemente, define las estructuras con el nombre que quieras. Por ejemplo,

struct DATOS_B
{
  char nomb[30];
  float estatura;
};

a> class A
a> {
a>   public:
a>     int buscar(char nomb[30])
a>     { aca busco nomb en "datos" y me devuelve la posicion;
a>     }
a>   private:
a>     DATOS_A datos[1000]
a> }
a> y luego hago otra clase que se deriva de A digamos:
a> class B : public A
a> {
a>   private:
a>     DATOS_B datos[1000];
a> }
a> luego hago
a> B* b = new b();

Realmente, esto debería ser,

B* b = new B;

a> int pos;
a> pos = b->buscar("abcd"); //Se supone que buscar es heredado de A
a> Como hago para que busque en "datos" de B y no en "datos" de A.

Veamos. Tienes razón que 'buscar()' es heredada, pero eso no significa que la función miembro "mágicamente" se adepte a la clase derivada y a sus datos miembros. Si quieres que la clase B tenga una función miembro 'buscar()', entonces deberás implementarla para que funcione con 'B'. Por ejemplo,

class B : public A
{
private:
  DATOS_B datos[1000];

public:
  int buscar( const char nomb[30] )
  {
  ...
  }
};


Espero haber aclarado la duda.

Steven


Más información sobre la lista de distribución Cconclase