Enfoque: 1que es el mejor enfoque para comprobar el tipo de objeto
class Employee
{
public:
virtual int calculateSalary() = 0;
};
class PermanentEmployee : public Employee {
const int salaryPerMonth;
public:
PermanentEmployee(int sal) : salaryPerMonth(sal){}
int calculateSalary() {
return salaryPerMonth;
}
};
class ContractEmployee : public Employee {
const int wagesPerHr;
int totalHour;
public:
ContractEmployee(int sal) : wagesPerHr(sal), totalHour(0){}
void setWorkingDuration(int time) {
totalHour = totalHour + time;
}
int calculateSalary() {
return wagesPerHr * totalHour;
}
};
class Manager {
list<Employee *> ls;
public:
void assignWorkingHour() {
list<Employee *>::iterator it;
for(it = ls.begin(); it != ls.end(); it++) {
Employee *emp = *it;
ContractEmployee* contractEmp = dynamic_cast<ContractEmployee* >(emp);
if(contractEmp) {
contractEmp->setWorkingDuration(5);
}
}
}
};
En el problema, hay 2 tipo de empleado: PermanentEmployee y ContractEmployee. Hay una clase llamada Manager que contiene una lista de todos los empleados que trabajan con él. Para ContractEmployee, tiene que invocar la función setWorkingDuration, que se invoca en el método assignWorkingHour of class Manager.
El problema es: Aquí tipo de empleado es ser determind por el operador dynamic_cast y director tiene que saber acerca de todo tipo de clase derivan del Empleado
Approach2: añadir otro miembro en la clase Empleado
enum TypeOfEmployee {CONTRACT, PERMANENT};
y comprobar TypeOfEmployee para determinar el tipo de empleado
Informe a que es mejor o ¿hay algún enfoque alternativo?
Me gusta la pregunta. Me preocupé por el costo de dynamic_cast. – Lou
http://www.nerdblog.com/2006/12/how-slow-is-dynamiccast.html puede ser una lectura relevante para usted. –
¿Es esta una pregunta para la tarea? Tengo curiosidad. –