#include <iostream>
#include <string>

using namespace std;

class Producto {
public:
    Producto(double p, string n) {
        nombre = n;
        precio = p;
    }
    virtual void orden() {
        cout << "Su producto es " << nombre << " y el precio es " << precio << endl;
    }
protected:
    double precio;
    string nombre;
};

class Helado : public Producto {
public:
    Helado(string s, double p, string n) : Producto(p, n) {
        sabor = s;
    }
    void orden() override {
        cout << "El helado es de sabor " << sabor << ", Nombre: " << nombre << ", Precio: " << precio << endl;
    }
protected:
    string sabor;
};

class Bebida : public Producto {
public:
    Bebida(string t, double p, string n) : Producto(p, n) {
        tamaño = t;
    }
    void orden() override {
        cout << "La bebida es de tamaño " << tamaño << ", Nombre: " << nombre << ", Precio: " << precio << endl;
    }
    string tamaño;
};

int main() {
    Producto obj(3.150, "chococono");
    obj.orden();

    Helado obj2("fresa", 4.56, "helado cuadrado");
    obj2.orden();

    Bebida obj3("3 onzas", 3.55, "vive 100");
    obj3.orden();

    return 0;
}

/*
La clase Producto tiene dos atributos, nombre y precio, y un método virtual llamado orden, el cual imprime el nombre y el precio del producto. 

Las clases Bebida y Helado heredan de la clase Producto. Cada una de estas clases sobreescribe el método orden para proporcionar una implementación específica que incluye información adicional relevante para cada tipo de producto: sabor para Helado y tamaño para Bebida. 

En las clases derivadas, se utilizan constructores que llaman al constructor de la clase base -Producto para inicializar los atributos heredados (nombre y precio). 

El método orden en cada clase derivada muestra cómo se puede utilizar el polimorfismo para extender y personalizar el comportamiento de una clase base en clases derivadas. La sobrescritura del método orden permite que los objetos de Bebida y Helado puedan ser manejados como objetos de Producto, pero con comportamiento especializado.

Además, los atributos precio y nombre son protected, lo que significa que son accesibles desde las clases derivadas pero no desde fuera de la jerarquía de herencia.
*/

Embed on website

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