C/Visual C - Pilas, Colas y arrays void.

 
Vista:

Pilas, Colas y arrays void.

Publicado por Ecuménico Malbrán (3 intervenciones) el 09/06/2003 07:27:13
Hola a los colaboradores del foro:
Necesito saber qué aplicación concreta pueden tener las estructuras dinámicas de datos: pilas y colas. En la web sólo he encontrado lo que se refiere a su creación, inserción, borrado, recorrido. etc. , pero no para que usaría esto en la realidad o en algún tipo de simulación. Algo leí también sobre su uso en la construcción de compiladores, puede ser?
Agredecería cualquier tipo de colaboración o dirección web sobre el tema.

Otra cosa: puedo crear un vector para guardar objetos de distinto clase? Hice una prueba con :
void * V[2] ;
clase1 ObjetoClase1;
clase2 ObjetoClase2;

V[0] = ( clase1 * ) & ObjetoClase1 ;
V[1] = (clase2 * ) & ObjetoClase2 ;

en ambos objetos hay una func. miembro que visualiza los miembros datos de cada uno : se llama Ver().

Quiero hacer un ciclo for ,para activar cada objeto y llamar a su correspondiente func. Ver(). algo asi como:
for ( i=0 ......
{
v[ i ].Ver();
// lo correcto CREO que es : * ( clase1 * ) v[ i ]->Ver() ;
// pero me sirve SOLO cuando i=0 porque ese objeto es de clase1.
// se entiende? espero que si...
}

Se podrá hacer esto sin tener en cuenta la clase del objeto?
Es posible en C/C++ saber el tipo o clase de una variable u objeto?
GRACIAS POR TU AYUDA.

Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Pilas, Colas y arrays void.

Publicado por Oliver++ (339 intervenciones) el 09/06/2003 15:32:12

La palabra clave typeid identifica un operador con el que puede obtenerse el tipo de objetos y expresiones en tiempo de ejecución; permite comprobar si un objeto es de un tipo particular y si dos objetos son del mismo tipo. Este tipo de identificación en tiempo de ejecución es conocida abreviadamente como RTTI .

En la primera el operando sería una expresion que adoptaría el papel de argumento de la función; una llamada a esta función devuelve una referencia ( 4.2.3) a un objeto de tipo constante, type_info; como veremos a continuación , este objeto describe el tipo del operando [1]. Ejemplo:

int x = 10, y = 20;
const type_info & tipo1 = typeid(x+z);

class C { int x; } c1;
const type_info & tipo2 = typeid(c1);

La segunda forma de la sintaxis permite que el operando sea un nombre-de-tipo; entonces typeid devuelve la referencia a un objeto type_info para ese tipo. El operador puede utilizarse tanto con tipos fundamentales como con tipos definidos por el usuario.

const type_info & tipo3 = typeid(float);
const type_info & tipo4 = typeid(C);

NOTA: ESTO FUE TOMADO DEL CURSO DE C++ DE ZATOR SYSTEM
PARA MAS INFO IR A:

www.zator.com
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Pilas, Colas y arrays void.

Publicado por chuidiang (677 intervenciones) el 09/06/2003 18:57:17
Oye, Oliver, eso del typeid es interesante. ¿Es de C++ standard o es particular de Visual C++?

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Pilas, Colas y arrays void.

Publicado por chuidiang (677 intervenciones) el 09/06/2003 18:48:56
Tienes que hacer que clase1 y clase2 hereden de un padre comun con el metodo Ver() virtual puro.

class Padre
{
public:
virtual void Ver() = 0;
}

Tu array debes hacerlo a punteros a esta clase padre

Padre *V[2];

En este array puedes meter sin ningún problema cualquier clase hija.

V[0] = &ObjetoClase1;
V[1] = &ObjetoClase2;

Luego puedes llamar, sin necesidad de hacer cast, al metodo Ver() del objeto en el array.

V[0]->Ver();
V[1]->Ver();

El polimorfismo de C++ se encarga de que se llame al metodo Ver() de la clase hija adecuada.

Para que el polimorfismo funcione correctamente es obligatorio el uso de punteros y la llamada a través de ->. Si haces

( *V[0] ).Ver();

posiblemente te de un error de que Padre no tiene el método definido o que se ha llamado a un método virtual puro, ya que *V[0] lo convierte en una instancia de Padre y .Ver() llama al metodo Ver() de Padre, no al del hijo.

En cuando a lo de las colas y arboles, son estructuras de datos que tienes disponibles para su uso en lo que tu quieras. Siento no poder darte ejemplos concretos.

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Pilas, Colas y arrays void.

Publicado por Ecuménico (3 intervenciones) el 09/06/2003 21:59:22
THANK YOU
THANK YOU
THANK YOU

COMO TE QUIERO
COMO TE QUIERO

Voy a ser bueno, en serio UN MILLON DE GRACIAS.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ATENCION CHUIDIANG

Publicado por Ecuméncio (3 intervenciones) el 10/06/2003 16:30:59
Hola de nuevo:
Chuidiang, me sale un error al crear un objeto de la clase derivada clase1 y clase2 de la abstracta Padre. El compilador me dice que clase1 es una clase abstracta. QUE PODRA SER? Uso TC++ 3.0
GRACIAS POR TU AYUDA.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ATENCION CHUIDIANG

Publicado por chuidiang (677 intervenciones) el 10/06/2003 19:02:44
Para poder instanciar una clase es obligatorio que la clase redefina con código todos los métodos virtuales puros de sus clases padre. Si Padre tiene el método Ver() virtual puro, clase1 debe obligatoriamente redefinirlo y darle código para poder ser instanciada.

Si ya lo tienes así y aun así te da error, es muy probable que te hayas equivocado en una tontería al redefinir el método (por ejemplo, ponerlo protected en vez de public, redefinir ver() en vez de Ver(), que el tipo del parámetro no sea exactamente igual y resumiendo, cualquier cosa que haga que el método declarado no sea el de la clase Padre, sino otro que se parece).

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar