我为我的C ++课程编写了一个程序,我遇到了一个我不太确定如何解决的问题。你们中的一些人可能熟悉这本教科书练习,因为我之前在网站上看过有关它的问题,但我找不到任何简单的修复。
我必须创建一个用于存储披萨信息的类。我已经编写了程序并且功能正常,但是我需要类调用来根据用户的输入循环一系列迭代。我知道这可以通过矢量来实现,这是我们在学期尚未达到的目标,但我很快就能确定。有没有向量的方法呢?
这是班级。
class Pizza
{
private:
int type;
int size;
int numCheeseTopping;
int numPepperoniTopping;
bool cheeseTopping;
bool pepperoniTopping;
public:
Pizza();
int getType();
int getSize();
bool getCheese();
bool getPepperoni();
void setType(int t);
void setSize(int s);
void setCheese(bool choice, int temp);
void setPepperoni(bool choice, int temp);
void outputDescription();
double computePrice();
void outputPrice();
};
构造函数。
Pizza::Pizza()
{
// Set initial class values
type = DEEPDISH;
size = SMALL;
cheeseTopping = false;
numCheeseTopping = 0;
pepperoniTopping = false;
numPepperoniTopping = 0;
}
Main只有两个功能。
// Main function
int main()
{
// Call global functions
welcomeMsg();
buildPizza();
return 0;
}
我觉得我的问题在于buildPizza函数,因为它调用其他函数以及创建对象。这是......
void buildPizza()
{
char pType, pSize, tempCheese, tempPepperoni;
int type = 0, size = 0, numCheeseTopping = 0, numPepperoniTopping = 0;
// Ask user what size pizza they would like.
cout << "What size pizza would you like?" << endl;
cout << "\tS: Small" << endl;
cout << "\tM: Medium" << endl;
cout << "\tL: Large" << endl;
cout << "Size: ";
cin >> pSize;
// Determine which size the user input and convert the
// result.
switch (pSize)
{
case 'S':
case 's':
size = SMALL;
break;
case 'M':
case 'm':
size = MEDIUM;
break;
case 'L':
case 'l':
size = LARGE;
break;
}
// Ask the user which type of pizza they would like.
cout << endl << "What type pizza would you like?" << endl;
cout << "\tD: Deepdish" << endl;
cout << "\tH: Hand-Tossed" << endl;
cout << "\tP: Pan" << endl;
cout << "Type: ";
cin >> pType;
// Determine which type the user input and convert the
// result.
switch (pType)
{
case 'D':
case 'd':
type = DEEPDISH;
break;
case 'H':
case 'h':
type = HANDTOSSED;
break;
case 'P':
case 'p':
type = PAN;
break;
}
// Call Pizza Class.
Pizza myPizza;
// Call Pizza Class functions.
myPizza.setSize(size);
myPizza.setType(type);
// Ask user whether they want cheese or not.
cout << endl << "Would you like cheese (y/n)? ";
cin >> tempCheese;
// If so call setCheese.
if (tempCheese == 'Y' || tempCheese == 'y')
{
cout << "How many cheese toppings would you like? ";
cin >> numCheeseTopping;
myPizza.setCheese(true, numCheeseTopping);
}
// Ask user whether they want pepperoni or not.
cout << endl << "Would you like pepperoni (y/n)? ";
cin >> tempPepperoni;
// If so call setPepperoni.
if (tempPepperoni == 'Y' || tempPepperoni == 'y')
{
cout << "How many pepperoni toppings would you like? ";
cin >> numPepperoniTopping;
myPizza.setPepperoni(true, numPepperoniTopping);
}
// Call outputDescription to give user an overview
// of their order.
cout << endl << endl;
myPizza.outputDescription();
cout << endl;
// Compute the cost of the pizza and display it.
myPizza.outputPrice();
}
基本上,我希望程序能够询问用户他们想要评估多少个比萨饼,创建多个类迭代,然后循环“建立”#。或者&#39;订购&#39;每个披萨,然后显示总数并返回0.
当我查看代码时,我可以从buildPizza中取出最后两个函数调用并将调用移到main中,但这不会解决我的问题。我只是在程序中注意到了疏忽。
是否有一种简单的方法可以在运行时同时创建200个新对象。每个人都有不同的名字?我应该只选择一个数字来评估并强制用户输入那么多对象的信息吗?现在,该程序评估一个披萨并退出。
我喜欢这样的事情:
这可能与我的代码有关,还是我需要考虑重写?社区可以给我的任何指导都会非常有帮助。 感谢。
凯尔
答案 0 :(得分:1)
既然你要使用数组或向量,那么就足够了。
auto nrPizzas = getNumberOfPizzasFromUserInput();
for(int i = 0; i < nrPizzas; i++) {
auto pizza = Pizza{};
// do your stuff here.
output to the screen here();
}
答案 1 :(得分:0)
您可以提示用户想要的比萨饼数量,然后创建一个包含多个比萨饼的动态数组,然后遍历他们的构建函数,否则您可以使用结构类型的比萨饼制作链接列表,然后重写主要逻辑。如果您不想提示用户想要订购多少披萨,建议采用第二种方法。