#include <iostream>
#include <string>

using namespace std;

class Empleado {
public:
    Empleado(string n, string c, double p, double d)
        : nombre(n), cargo(c), precio_dia(p), dias_trabajados(d) {}

    void trabajar() {
        cout << "El empleado " << nombre << " con cargo " << cargo
             << " trabajo " << dias_trabajados << " dias." << endl;
    }

    virtual void calcular_pago() {
        cout << "El empleado " << nombre << " se le debe $"
             << precio_dia * dias_trabajados << endl;
    }

protected:
    string nombre;
    string cargo;
    double precio_dia;
    double dias_trabajados;
};

class Administrador : public Empleado {
public:
    Administrador(string n, string c, double p, double d, string dep)
        : Empleado(n, c, p, d), departamento(dep) {}

    void calcular_pago() override {
        cout << "El Administrador " << nombre << " del departamento "
             << departamento << " se le debe $"
             << precio_dia * dias_trabajados << endl;
    }

private:
    string departamento;
};

class Obrero : public Empleado {
public:
    Obrero(string n, string c, double p, double d, double bono)
        : Empleado(n, c, p, d), bono(bono) {}

    void calcular_pago() override {
        double pago_total = (precio_dia * dias_trabajados) + bono;
        cout << "El Obrero " << nombre << " se le debe $"
             << pago_total << " incluyendo un bono de $" << bono << endl;
    }

private:
    double bono;
};

int main() {
    Empleado* empleados[2];
    empleados[0] = new Administrador("Juan Perez", "Administrador", 60.000, 20, "Recursos Humanos");
    empleados[1] = new Obrero("Manuel Diaz", "Obrero", 38.000, 22, 20.000);

    for(int i = 0; i < 2; ++i) {
        empleados[i]->trabajar();
        empleados[i]->calcular_pago();
        delete empleados[i];
    }

    return 0;
}

/*
Este código implementa una jerarquía de clases para calcular el pago de empleados según los días trabajados en un mes. La clase base Empleado tiene atributos para el nombre, cargo, precio por día y días trabajados. Además, proporciona métodos para mostrar la cantidad de días trabajados  y calcular el pago correspondiente.

Las clases derivadas Administrador y Obrero heredan de Emplead` y añaden características específicas. Administrador incluye un atributo adicional para el departamento, mientras que Obrero incluye un bono adicional al salario calculado.

En el main(), se crean instancias de Administrador y Obrero utilizando punteros a la clase base Empleado. Se llama a los métodos trabajar() y calcular_pago() para cada empleado. Finalmente, se libera la memoria asignada dinámicamente para evitar fugas de memoria.

Este ejemplo demuestra el uso de la herencia y el polimorfismo en C++ para manejar diferentes tipos de empleados y calcular su pago de manera apropiada.
*/

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: