/* * Pizza.hpp * * Created on: 3 нояб. 2021 г. * Author: alexander */ #pragma once #include #include #include #include "Dough.hpp" #include "Sauce.hpp" #include "Cheese.hpp" #include "Veggies.hpp" #include "Pepperoni.hpp" #include "Clams.hpp" class Pizza { private: std::string name; Dough *dough = NULL; Sauce *sauce = NULL; std::vector veggies; Cheese *cheese = NULL; Pepperoni *pepperoni = NULL; Clams *clam = NULL; public: virtual void prepare() = 0; virtual void bake() const { std::cout << "Bake for 25 minutes at 350" << std::endl; } virtual void cut() const { std::cout << "Cutting the pizza into diagonal slices" << std::endl; } virtual void box() const { std::cout << "Place pizza in official PizzaStore box" << std::endl; } virtual std::string getName() const { return name; } virtual void setName(std::string name) { this->name = name; } virtual void setDough(Dough *dough) { this->dough = dough; } virtual void setSauce(Sauce *sauce) { this->sauce = sauce; } virtual void setVeggies(const std::vector &veggies) { this->veggies = veggies; } virtual void setCheese(Cheese *cheese) { this->cheese = cheese; } virtual void setPepperoni(Pepperoni *pepperoni) { this->pepperoni = pepperoni; } virtual void setClams(Clams *clam) { this->clam = clam; } void toString() { std::cout << "---- " << name << " ----" << std::endl; if (dough) { std::cout << '\t' << dough->toString() << std::endl; } if (sauce) { std::cout << '\t' << sauce->toString() << std::endl; } if (cheese) { std::cout << '\t' << cheese->toString() << std::endl; } if (!veggies.empty()) { std::cout << '\t'; for (size_t i = 0; i < veggies.size(); i++) { std::cout << veggies[i]->toString(); if (i < veggies.size() - 1) { std::cout << ", "; } } std::cout << std::endl; } if (clam) { std::cout << '\t' << clam->toString() << std::endl; } if (pepperoni) { std::cout << '\t' << pepperoni->toString() << std::endl; } } virtual ~Pizza() { if (dough) delete dough; if (sauce) delete sauce; if (cheese) delete cheese; if (pepperoni) delete pepperoni; if (clam) delete clam; for (auto vegetable : veggies) { delete vegetable; } } };