Impoacto de las nuevas tecnologias

Herencia y Polimorfismo en C++
Informática II Fundamentos de Programación
18 de Febrero de 2002

Escuela Superior de Ingenieros de San Sebastián – Tecnun

1

Herencia
• Concepto de “herencia”:
– Una clase -clase derivada- puede definirse a partir de otra clase ya existente (clase base), de la que hereda sus variables y funciones miembro. – La clase derivada puede añadir y/o redefinirnuevas variables y/o funciones miembro. – La clase base suele ser más general que la clase derivada. Ésta añade nuevas determinaciones o especificaciones (nuevas variables y/o funciones miembro). – A su vez, la clase derivada puede ser clase base de una nueva clase derivada, que hereda sus variables y funciones miembro. Se puede constituir una jerarquía de clases.

Además de public yprivate, C++ permite también definir miembros protected.
– Los miembros protected, al igual que los private, no son accesibles desde fuera de la clase. – En una clase base, los miembros protected se diferencian de los private en que sí pueden ser accesibles para las clases derivadas de dicha clase base.

Para la clase derivada, la clase base se puede heredar como pública o como privada:
– Laclase derivada no tiene acceso a los miembros private de la clase base. Sí tiene acceso a los miembros public y protected. – Si la clase base se hereda como public, la clase derivada hereda los miembros public y protected de la clase base como miembros public y protected, respectivamente. – Si la clase base se hereda como private, la clase derivada hereda todos los miembros de la clase base comoprivate.
Escuela Superior de Ingenieros de San Sebastián – Tecnun 2

Ej. de herencia: clase “empleado”
• Supóngase que un departamento de una empresa utiliza tres tipos de empleados:
– subcontratado: cobra por horas. – vendedor: cobra por horas, más una comisión de las ventas. – encargado: cobra una cantidad fija por mes.

y que se desea hacer una función llamada calcular_pago() quecalcule lo que hay que pagar cada mes a cada empleado. Empleado Se puede pensar en una jerarquía de empleados de la forma indicada en la figura:
Subcontratado Vendedor Encargado

Los principios de esta jerarquía son los siguientes:

– Todos son empleados. – Los vendedores cobran por horas como los subcontratados (de hecho son un tipo especial de subcontratados), pero tienen además unacomisión, por lo que pueden ser considerados como una particularización de éstos. – Los encargados sólo tienen en común con los demás el hecho de ser empleados.
Escuela Superior de Ingenieros de San Sebastián – Tecnun 3

Enc_ ventas

Ej. de herencia (cont.)
Clase base empleado:
class empleado { private: char nombre[31]; public: empleado(); empleado(const char *nom); char *devolver_nombre(); floatcalcular_pago() {return 0.0;} };

Clase derivada subcontratado:
class subcontratado : public empleado { private: float tarifa; float no_horas; public: subcontratado(const char *nom); void fijar_tarifa(float tar); void contar_horas(float horas); float calcular_pago(); };

Clase derivada vendedor:
class vendedor : public subcontratado
{

private:
float comision; float ventas_realizadas;public: vendedor(const char *nom); void fijar_comision(float com); void contar_ventas(float ventas); float calcular_pago(); };

Obsérvese la forma en que, en cada clase derivada, se define la forma en que se hereda la clase base como public o private.
Escuela Superior de Ingenieros de San Sebastián – Tecnun 4

Ej. de herencia (cont.)
Definición de la clase derivada encargado:
class encargado: public empleado { private: float sueldo_mensual; public: encargado(const char *nom); void fijar_sueldo(float sueldo); float calcular_pago(); };

• • • • •

Recuérdese que cada una de las clase derivadas hereda todos los miembros de la clase base correspondiente. La clase vendedor hereda los miembros de las clases subcontratado y empleado. La clase derivada no puede acceder directamente a…