Ver Mensaje Individual
  #3 (permalink)  
Antiguo 02/12/2011, 07:29
nh2006
 
Fecha de Ingreso: diciembre-2006
Mensajes: 213
Antigüedad: 17 años, 4 meses
Puntos: 3
Respuesta: cómo listar stl de punteros

Hola,

De antemano muchas gracias por la respuesta, tengo otra pregunta, cuando ya tengo todos los objetos en la lista y quiero invocar a un método de esos objetos que son diferentes. ¿Cómo hago eso?. Les dejo un código ya funcionando pero que me da error en la línea it->VerNombre(); que se encuentra en el for en el método listar.
VerNombre es un método que es heredado y se implementa de diferente forma en las clases hijas.

Código C++:
Ver original
  1. #include <list>
  2. #include <iostream>
  3. using namespace std;
  4. class Persona {
  5. public:
  6.     Persona(char *n) {
  7.         strcpy(nombre, n);
  8.     }
  9.     virtual void VerNombre() {
  10.         cout << nombre << endl;
  11.     }
  12.     virtual void VerApellido(){}
  13. protected:
  14.     char nombre[30];
  15. };
  16. class Empleado : public Persona {
  17. public:
  18.  
  19.     Empleado(char *n) : Persona(n) {
  20.     }
  21.  
  22.     void VerNombre() {
  23.         cout << "Emp: " << nombre << endl;
  24.     }
  25. };
  26. class Estudiante : public Persona {
  27. public:
  28.  
  29.     Estudiante(char *n) : Persona(n) {
  30.     }
  31.  
  32.     void VerNombre() {
  33.         cout << "Est: " << nombre << endl;
  34.     }
  35.     void VerApellido() {
  36.         cout << "Este es mi apellido "<<endl;
  37.     }
  38. };
  39.  
  40. void listar(list <Persona *> lst) ;
  41. /*
  42.  *
  43.  */
  44. int main(int argc, char** argv) {
  45.     list <Persona *> lstPersona;
  46.     Persona *Pepito = new Estudiante("Jose");
  47.     Persona *Carlos = new Empleado("Carlos");
  48.  
  49.     lstPersona.push_back(Pepito);
  50.     lstPersona.push_back(Carlos);
  51.    
  52.     listar(lstPersona);
  53.     return 0;
  54. }
  55.  
  56. void listar(list <Persona *> lst) {
  57.     list <Persona *>::iterator it;
  58.     for( it = lst.begin(); it != lst.end(); it++ ){
  59.         it->VerNombre();
  60.     }
  61. }

Saludos