// ------------------------------------------------------------- // CLASE BASE: Maquina // ------------------------------------------------------------- class Maquina { protected: std::string idMaquina; double horasUso; double costoBaseHora; public: Maquina(std::string id, double horas, double costoBase) : idMaquina(id), horasUso(horas), costoBaseHora(costoBase) {} virtual ~Maquina() {} // Método POLIMÓRFICO (virtual) virtual double calcularCostoMantenimiento() const { return horasUso * costoBaseHora; } }; // ------------------------------------------------------------- // CLASE DERIVADA 1: PrensaHydraulica (HERENCIA) // ------------------------------------------------------------- class PrensaHydraulica : public Maquina { private: double presionPSI; public: PrensaHydraulica(std::string id, double horas, double costoBase, double presion) : Maquina(id, horas, costoBase), presionPSI(presion) {} // Redefinición POLIMÓRFICA del cálculo de costo double calcularCostoMantenimiento() const override { double costoBaseCalculado = Maquina::calcularCostoMantenimiento(); if (horasUso > 500.0) { return costoBaseCalculado * 1.20; // Recargo del 20% } return costoBaseCalculado; } }; // ------------------------------------------------------------- // CLASE DERIVADA 2: RobotSoldadura (HERENCIA) // ------------------------------------------------------------- class RobotSoldadura : public Maquina { private: int numeroEjes; public: RobotSoldadura(std::string id, double horas, double costoBase, int ejes) : Maquina(id, horas, costoBase), numeroEjes(ejes) {} // Redefinición POLIMÓRFICA del cálculo de costo double calcularCostoMantenimiento() const override { return Maquina::calcularCostoMantenimiento() + 500.0; // Adicional fijo por calibración } };