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- #include <list> 
- #include <iostream> 
- using namespace std; 
- class Persona { 
- public: 
-     Persona(char *n) { 
-     } 
-     virtual void VerNombre() { 
-         cout << nombre << endl; 
-     } 
-     virtual void VerApellido(){} 
- protected: 
-     char nombre[30]; 
- }; 
- class Empleado : public Persona { 
- public: 
-   
-     Empleado(char *n) : Persona(n) { 
-     } 
-   
-     void VerNombre() { 
-         cout << "Emp: " << nombre << endl; 
-     } 
- }; 
- class Estudiante : public Persona { 
- public: 
-   
-     Estudiante(char *n) : Persona(n) { 
-     } 
-   
-     void VerNombre() { 
-         cout << "Est: " << nombre << endl; 
-     } 
-     void VerApellido() { 
-         cout << "Este es mi apellido "<<endl; 
-     } 
- }; 
-   
- void listar(list <Persona *> lst) ; 
- /* 
-  *  
-  */ 
- int main(int argc, char** argv) { 
-     list <Persona *> lstPersona; 
-     Persona *Pepito = new Estudiante("Jose"); 
-     Persona *Carlos = new Empleado("Carlos"); 
-   
-     lstPersona.push_back(Pepito); 
-     lstPersona.push_back(Carlos); 
-      
-     listar(lstPersona);  
-     return 0; 
- } 
-   
- void listar(list <Persona *> lst) { 
-     list <Persona *>::iterator it; 
-     for( it = lst.begin(); it != lst.end(); it++ ){ 
-         it->VerNombre(); 
-     }  
- } 
Saludos