这是家庭作业...我不是要答案,只是有一个我不确定该怎么做的错误。谢谢!
有问题的bug可能与任务本身无关,但是无论如何这是任务描述:
我正在做一个作业(用C++语言编写),目的是通过带馅料的披萨的经典示例来教教装饰器设计模式的使用。 (我的教授也可能直接从http://simplestcodings.com/2010/12/26/decorator-design-pattern-example-ni-c/删除了它)。我遇到了一个小问题,我想知道是否有人可以帮助我。
我有一个主菜单(pizzeria)对象,该对象接受用户的输入并在披萨上执行所需的操作。用户从基本的披萨开始,然后可以在其上添加浇头,直到完成。因此,我的“newPizza”函数要做的第一件事是将新的Pizza声明为Plain
,它是抽象类Pizza
的子类。
然后,他们可以输入自己选择的浇头。每次,将指向相同Pizza
对象的指针发送到addToppings()
函数,添加新修饰,并返回该指针。每个装饰都从价格类别继承,而价格类别从pizzaToppings
继承,而Pizza
从currentPizza
继承。
这是主要订单功能的相关部分:
Pizza* Menu::newPizza()
{
cout << "\nNew Pizza";
//accept the next choice
int choose = 0;
//create the new pizza
Plain * currentPizza = new Plain();
//until they choose to end the order
while (choose != 3)
{
//accept the choice
cin >> choose;
switch (choose)
{
//if they want to add a new topping
case 1:
{
//add topping to current pizza
//and this is where the problem is spotted by the compiler
addTopping(currentPizza);
break;
}
问题是,当我尝试将指针
addTopping()
发送到函数ojit_code时,我得到了“运行时检查失败#3-使用变量'currentPizza'时未进行初始化。”
我不是刚刚在第7行上对其进行了初始化吗?
如果我单击“continue”,该程序将继续运行并运行,但是每次调用该函数时都会遇到相同的错误。它只是某个地方的语法错误,还是我这里有一些实际问题?
谢谢!!
[编辑:]
addTopping()函数:
Pizza* Menu::addTopping(Pizza* thisPizza)
{
cout << "\nAdd topping";
//declare choose int
int choose = 0;
//accept number of topping
cin >> choose;
//decide which one to add
switch (choose)
{
//mozzarella
case 1:
{
thisPizza = new Mozzarella(thisPizza);
break;
}
//mushrooms
case 2:
{
thisPizza = new Mushrooms(thisPizza);
break;
}
//another 13 possible toppings, won't bore you with the details ;)
}
cout << "\nEnd add topping\n";
return thisPizza;
}
最佳答案
您是否也已将currentPizza
声明为Pizza
类的字段,并且正在其他地方使用它?如果是这样,则您要在currentPizza
中更新的newPizza
特定于该方法,您只需要执行currentPizza = new Plain();
即可,而不是在方法范围内声明新的currentPizza
变量。
同样,在addTopping
方法中,您仅更新参数thisPizza
,它是指针currentPizza
的副本。
您需要做:
currentPizza = addTopping(currentPizza);