• Lunes 29 de Abril de 2024, 20:50

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - registrosmfg

Páginas: [1]
1
C++ Builder / Clases ¿anidadas?
« en: Lunes 12 de Abril de 2010, 14:55 »
Hola a tod@s,

Si tengo una clase que tiene un miembro de datos que puede ser de un tipo o de otro dependiendo de un parámetro ¿como se podría implementar esto?. Me explico mejor:

Clase A1{
     int *vector[10];
     int nelems;
}
Clase A2{
   char *cadena;
}

Clase A{
   int tipoClase;   //Indica si es A1 o A2

   //Aquí generaríamos dependiendo de tipoClase
   Clase A1
   o
   Clase A2
}

¿Esto se puede implementar o estoy diciendo una burrada?
Muchas gracias
Buenas tardes

2
C++ Builder / Nodos árbol TRIE. Herencia
« en: Lunes 12 de Abril de 2010, 10:34 »
Hola a tod@s, hace unas semanas que me estoy volviendo loco con el diseño de un árbol Trie y no consigo que me salga. Mis conocimientos en herencia son bastante pobres y les agradecería que me echaran una mano con las clases NodoTrie.
Tengo dos tipos de nodos, uno con enlaces y otro con información. He creado una clase general (NodoTrie) y luego dos subclases que heredan de la primera (NEnlaces y NInfo).
¿Alguién me podría decir como tengo que hacer la función el .h para que me funcione la función buscar?
Esto es lo que tengo:

typedef enum {LNK,INFO} TipoNodo;

class NodoTrie {
private:
TipoNodo tipo;
public:
NodoTrie(TipoNodo tn);
NodoTrie *buscar(char *, int);
.......
};

class NodoLNK:public NodoTrie {
private:
NodoTrie *final;
NodoTrie *lpalabras[NUM_ENLACES];
public:
NodoLNK();
~NodoLNK();
};

class NodoINF: public NodoTrie {
protected:
char *palabra;
public:
NodoINF(char *sPal);
};

Y EN EL .CPP:
==============

NodoTrie* NodoTrie::buscar(char *sPal, int p){
if (tipo == LNK) {
NodoLNK *ND = (NodoLNK *) this;
if (strlen(sPal)>p) {
int iLetra=PosLetra(sPal[p]);
if (ND->lpalabras[iLetra] != NULL)
return ND->lpalabras[iLetra]->buscar(sPal, p+1);
}
}
else {
NodoINF *NI = (NodoINF *) this;
if (strcmp(sPal, NI->palabra)==0) return this;
}

return NULL;
}

LOS ERRORES QUE ME DAN SON:

'NodoTrie*NodoLNK::lpalabras[10] is private within this context

Creo que es porque utilizo lpalabras que está definida en NodoLNK en una
función de NodoTrie
¿Debería crear un método buscar para cada tipo de nodo?¿Como lo hago?
¿Como lo llamo desde el NodoTrie?

Estoy hecho un lío, por favor échenme una mano
Gracias, muchas gracias

Páginas: [1]