C/Visual C - clase Empresa necesita acceder a una coleccion

 
Vista:

clase Empresa necesita acceder a una coleccion

Publicado por andreafuhr (10 intervenciones) el 15/10/2006 21:40:45
Hola gente linda! A ver quien puede ayudarme en esto:
1. Tengo una clase abastracta llamada Employee
2. Tengo 2 clases que heredan de Employee. Una llamada Boss y la otra ComissionWorker.
3. Quiero crear una clase Empresa que me permita instanciar empleados e ir agregandolos a un array.

Mi declaracion es la siguiente:

Employee *ptr;
ptr=new Boss("apellido","nombre","salario");
ptr->print();
ptr=new ComissionWorker("apellido","nombre",salario,comision);
ptr->print();

esto funciona ok pero no se como hacer para que ptr sea una coleccion de empleados que luego pueda recorrer e ir imprimiendolos:

algo asi:
for (i=0;i<10;i++)
ptr[i].print();

MUCHAS GRACIAS.
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:clase Empresa necesita acceder a una coleccion

Publicado por Fran (122 intervenciones) el 16/10/2006 01:03:53
no se si ta bien lo q te dire... pero ahi va....

podes hacer q en vez de un puntero sea una matriz...
es decir

#define NRO_EMPLEADOS 10 /*tenes 10 empleados*/
Employee * * ptr;

int i = 8;
ptr[i]=new ComissionWorker("apellido","nombre",salario,comision);
ptr[i].printf();

te daria el empleado 8? no se, faltaria ver mas las clases esas por dentro, pero creeria q es asi, igual no se... decime despues si anduvo...
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:clase Empresa necesita acceder a una coleccion

Publicado por fernando.gomez (1603 intervenciones) el 20/10/2006 02:01:05
Más bien

#define NRO_EMPLEADOS 10 /*tenes 10 empleados*/
Employee * * ptr;

int i = 8;
ptr[i]=new ComissionWorker("apellido","nombre",salario,comision);
ptr[i].printf();

es incorrecto porque ptr es un puntero a un puntero. Para hacer lo que te comenta el compañero, si quieres declarar instancias de Employee de forma dinámica y tu vector que sea estático, entonces:

#define NRO_EMPLEADOS 10 /*tenes 10 empleados*/
Employee * ptr;

int i = 8;
ptr[i]=new ComissionWorker("apellido","nombre",salario,comision);
ptr[i]->printf(); // nota que se emplea -> y no el punto

evidentemente, estás creando una nueva instancia de Employee en la __novena__ posición del vector.

Ahora, también puedes hacer que tu matriz sea dinámica, pero que los elementos de la matriz sean objetos creados de forma no-dinámica:

#define NRO_EMPLEADOS 10 /*tenes 10 empleados*/
Employee * ptr;

int i = 8;
ptr = new Employee[NRO_EMPLEADOS];
ptr[i].nombre = "nombre"; // suponiendo que tengas una variable así,
// aquí no podrías emplear constructor más que el default.
ptr[i].printf(); // nota que se emplea punto y no ->

Finalmente, puedes tener ambas cosas: vector dinámico con elementos dinámicos. Entonces sí, tendríamos un puntero a puntero:

#define NRO_EMPLEADOS 10 /*tenes 10 empleados*/
Employee * * ptr;

int i = 8;
ptr = new Empoyee*[NRO_EMPLEADOS];
ptr[i]=new ComissionWorker("apellido","nombre",salario,comision);
ptr[i]->printf();

Solo recuerda emplear los deletes apropiadamente. Para hacer un delete de una matriz dinámica, sería:

delete [] ptr;

Si la matriz tiene elementos dinámicos, tienes que eliminar cada elemento:

delete ptr[0];
delete ptr[1];
...
delete ptr[n];

Si la matriz es dinámica y tiene elementos dinámicos, tienes que hacer ambas cosas:

delete ptr[0];
delete ptr[1];
...
delete ptr[n];
delete [] ptr;

Saludos.
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:clase Empresa necesita acceder a una coleccion

Publicado por Tom (619 intervenciones) el 16/10/2006 18:33:13
Pues lo mejor que puedes hacer es usar STL (Standard Template Library) y la clase Vector. En este caso, Empresa podría contener, por ejemplo un Vector para almacenar Boss y otro para almacenar CommissionWorker.

En la red (busca en google) hay mucha info sobre la clas Vector.
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:clase Empresa necesita acceder a una coleccion

Publicado por fernando.gomez (1603 intervenciones) el 20/10/2006 02:03:44
Yo también me iría por emplear la librería estándar de C++ (eso de STL ya es obsoleto :P), pero más aún, emplearía std::vector<Employee>, pudiendo almacenar instancias tanto de Boss como de CommissionWorker (gracias a la herencia). Más aún, si tu compilador soporte RTTI, siempre puedes emplear la palabra clave typeid para saber si el elemento es Boss o CommissionWorker.

Saludos.
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