This repository has been archived on 2022-11-09. You can view files and clone it, but cannot push or open issues or pull requests.
patterns-old/lesson_4/Pizza.hpp

139 lines
2.8 KiB
C++
Raw Permalink Normal View History

2021-11-02 18:18:09 +00:00
/*
* Pizza.hpp
*
2021-11-03 15:35:58 +00:00
* Created on: 3 нояб. 2021 г.
2021-11-02 18:18:09 +00:00
* Author: alexander
*/
#pragma once
#include <iostream>
2021-11-03 15:35:58 +00:00
#include <vector>
#include <sstream>
#include "Dough.hpp"
#include "Sauce.hpp"
#include "Cheese.hpp"
#include "Veggies.hpp"
#include "Pepperoni.hpp"
#include "Clams.hpp"
2021-11-02 18:18:09 +00:00
class Pizza
{
private:
std::string name;
2021-11-03 15:35:58 +00:00
Dough *dough = NULL;
Sauce *sauce = NULL;
std::vector<Veggies*> veggies;
Cheese *cheese = NULL;
Pepperoni *pepperoni = NULL;
Clams *clam = NULL;
2021-11-02 18:18:09 +00:00
public:
2021-11-03 15:35:58 +00:00
virtual void prepare() = 0;
2021-11-02 18:18:09 +00:00
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;
}
2021-11-03 15:35:58 +00:00
virtual void setDough(Dough *dough)
2021-11-02 18:18:09 +00:00
{
this->dough = dough;
}
2021-11-03 15:35:58 +00:00
virtual void setSauce(Sauce *sauce)
2021-11-02 18:18:09 +00:00
{
this->sauce = sauce;
}
2021-11-03 15:35:58 +00:00
virtual void setVeggies(const std::vector<Veggies*> &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;
}
2021-11-02 18:18:09 +00:00
2021-11-03 15:35:58 +00:00
void toString()
2021-11-02 18:18:09 +00:00
{
2021-11-03 15:35:58 +00:00
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;
}
2021-11-02 18:18:09 +00:00
}
2021-11-03 15:35:58 +00:00
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;
}
}
2021-11-02 18:18:09 +00:00
};