#include<iostre am.h>
#include<memory .h>
#include<string .h>
// product
class Pizza
{
private :
std::string Topping;
std::string Sauce;
std::string Dough;
public :
Pizza(){}
~Pizza(){}
void SetTopping(cons t std::string t) { Topping = t; }
void SetSauce(const std::string s){ Sauce = s; }
void SetDough(const std::string d){ Dough = d; }
void ShowPizza()
{
std::cout <<"What a Pizza"<<std::en dl
<<"Topping is "<<Topping
<<"Sauce is "<<Sauce
<<"Dough is "<<Dough
<<"! ! !"<<'\n';
}
};
// Abstract Builder
class PizzaBuilder
{
protected :
std::auto_ptr<P izzapizza;
public :
PizzaBuilder(){ }
virtual ~PizzaBuilder() {}
std::auto_ptr<P izzaGetPizza(){ return pizza;}
virtual void BuildTopping() = 0;
virtual void BuildSauce() = 0;
virtual void BuildDough() = 0;
std::auto_ptr<P izzaCreateNew_P izzaProduct()
{ pizza.reset(new Pizza()); }
/*********** code getting crashed here ***************/
};
// concrete Pizza Builder 1
class Hawian_PizzaBui lder : public PizzaBuilder
{
public :
Hawian_PizzaBui lder():PizzaBui lder(){ }
~Hawian_PizzaBu ilder(){ }
void BuildTopping() { pizza->SetTopping(" Hawian_PizzaBui lder
Topping ");}
void BuildSauce() { pizza->SetSauce("Hawi an_PizzaBuilder
Sauce ");}
void BuildDough() { pizza->SetDough("Hawi an_PizzaBuilder
Dough ");}
};
// concrete Pizza Builder 2
class Spicy_PizzaBuil der : public PizzaBuilder
{
public :
Spicy_PizzaBuil der():PizzaBuil der(){}
~Spicy_PizzaBui lder(){}
void BuildTopping() { pizza->SetTopping("Sp icy_PizzaBuilde r Topping
"); }
void BuildSauce() { pizza->SetSauce("Spic y_PizzaBuilder
Sauce "); }
void BuildDough() { pizza->SetDough("Spic y_PizzaBuilder
Dough "); }
};
// Director
class waiter
{
private :
PizzaBuilder * pizza_builder;
public :
waiter(): pizza_builder(N ULL){}
~waiter(){}
void SetPizzaBuilder (PizzaBuilder * b){ pizza_builder = b ;}
std::auto_ptr<P izzaGetPizza(){ return pizza_builder-
void ConstructPizza( )
{
pizza_builder->CreateNew_Pizz aProduct();
pizza_builder->BuildDough() ;
pizza_builder->BuildSauce() ;
pizza_builder->BuildTopping() ;
}
};
// user
int main()
{
waiter waiter_1;
Spicy_PizzaBuil der spicyPizzaBuild er;
waiter_1.SetPiz zaBuilder(&spic yPizzaBuilder);
waiter_1.Constr uctPizza(); // code getting Crashed here
std::auto_ptr<P izzapizza = waiter_1.GetPiz za();
pizza->ShowPizza();
return 0;
}
#include<memory .h>
#include<string .h>
// product
class Pizza
{
private :
std::string Topping;
std::string Sauce;
std::string Dough;
public :
Pizza(){}
~Pizza(){}
void SetTopping(cons t std::string t) { Topping = t; }
void SetSauce(const std::string s){ Sauce = s; }
void SetDough(const std::string d){ Dough = d; }
void ShowPizza()
{
std::cout <<"What a Pizza"<<std::en dl
<<"Topping is "<<Topping
<<"Sauce is "<<Sauce
<<"Dough is "<<Dough
<<"! ! !"<<'\n';
}
};
// Abstract Builder
class PizzaBuilder
{
protected :
std::auto_ptr<P izzapizza;
public :
PizzaBuilder(){ }
virtual ~PizzaBuilder() {}
std::auto_ptr<P izzaGetPizza(){ return pizza;}
virtual void BuildTopping() = 0;
virtual void BuildSauce() = 0;
virtual void BuildDough() = 0;
std::auto_ptr<P izzaCreateNew_P izzaProduct()
{ pizza.reset(new Pizza()); }
/*********** code getting crashed here ***************/
};
// concrete Pizza Builder 1
class Hawian_PizzaBui lder : public PizzaBuilder
{
public :
Hawian_PizzaBui lder():PizzaBui lder(){ }
~Hawian_PizzaBu ilder(){ }
void BuildTopping() { pizza->SetTopping(" Hawian_PizzaBui lder
Topping ");}
void BuildSauce() { pizza->SetSauce("Hawi an_PizzaBuilder
Sauce ");}
void BuildDough() { pizza->SetDough("Hawi an_PizzaBuilder
Dough ");}
};
// concrete Pizza Builder 2
class Spicy_PizzaBuil der : public PizzaBuilder
{
public :
Spicy_PizzaBuil der():PizzaBuil der(){}
~Spicy_PizzaBui lder(){}
void BuildTopping() { pizza->SetTopping("Sp icy_PizzaBuilde r Topping
"); }
void BuildSauce() { pizza->SetSauce("Spic y_PizzaBuilder
Sauce "); }
void BuildDough() { pizza->SetDough("Spic y_PizzaBuilder
Dough "); }
};
// Director
class waiter
{
private :
PizzaBuilder * pizza_builder;
public :
waiter(): pizza_builder(N ULL){}
~waiter(){}
void SetPizzaBuilder (PizzaBuilder * b){ pizza_builder = b ;}
std::auto_ptr<P izzaGetPizza(){ return pizza_builder-
>GetPizza();}
{
pizza_builder->CreateNew_Pizz aProduct();
pizza_builder->BuildDough() ;
pizza_builder->BuildSauce() ;
pizza_builder->BuildTopping() ;
}
};
// user
int main()
{
waiter waiter_1;
Spicy_PizzaBuil der spicyPizzaBuild er;
waiter_1.SetPiz zaBuilder(&spic yPizzaBuilder);
waiter_1.Constr uctPizza(); // code getting Crashed here
std::auto_ptr<P izzapizza = waiter_1.GetPiz za();
pizza->ShowPizza();
return 0;
}
Comment