1

作业:编写一个 C++ 程序,从 menu.txt 中读取菜单信息。项目代码中的第一个字母指定它是开胃菜 (A)、主菜 (E)、甜点 (D) 还是饮料 (S)。

A1 Bruschetta 5.29
A2 Caprese_Flatbread 6.10
A3 Artichoke-Spinach_Dip 3.99
A4 Lasagna_Fritta 4.99
A5 Mozzarella_Fonduta 5.99
E1 Lasagna_Classico 6.99
E2 Capellini_Pomodoro 7.99
E3 Eggplant_Parmigiana 8.99
E4 Fettuccine_Alfredo 7.49
E5 Tour_of_Italy 14.99
D1 Tiramisu 2.99
D2 Zeppoli 2.49
D3 Dolcini 3.49
S1 Soda 1.99
S2 Bella_Limonata 0.99
S3 Berry_Acqua_Fresca 2.88

然后提示用户输入订单。对于每个订单,您应该计算并输出总金额。项目可以在每一行中以任何顺序列出。

A1 E1 D1 S1 S2 D3 E4 A4 E3 E5 A2 A4 S2 S1 D2 D2 E2 X

一旦用户输入“X”,程序应该输出最受欢迎的开胃菜、主菜、甜点、饮料。如果有平局,您可以输出其中任何一个。

我遇到的问题是获取输入(例如,A1),然后解析数组以获取数组中的适当项目和位置(例如,A1 将是 test2[1],E1 希望是 test2[5] )。我知道数组已正确填充。我试图用来搜索数组的是:

for(int l = 0; l<SIZE; l++)
{   //I get an operator error every time here       
    if(s == (test2[l]))
    {   //Just a test to see if I am pulling 
        //any information                   
        cout << test2[l].getCode() << endl;
    }           
}   

测试被实例化为 MenuItem test2[SIZE]。

当我尝试使用上述方法时,我总是出错

's == test2[l]' 中的 'operator==' 不匹配</p>

下面是我的 MenuItem.h:

#ifndef MENUITEM_H
#define MENUITEM_H
#include <iostream>
#include <string>

using namespace std;

class MenuItem
{
private:
string code;
string name;
double price;

public:
MenuItem(string mcode = "", string mname = "", double mprice = 0);
~MenuItem();
string getCode() const { return code; }
string getName() const { return name; }
double getPrice() const { return price; }

void setCode(string mcode){ code = mcode; }
void setName(string mname){ name = mname; }
void setPrice(double mprice)  { price = mprice; }
};
#endif

感谢您的任何帮助和意见。

真挚地,

杰森

4

2 回答 2

1

好吧,如果您正在比较 MenuItem 类型的对象,那么您还没有完全实现 == 运算符。

在此处查找 C++ 中的运算符重载。

http://courses.cms.caltech.edu/cs11/material/cpp/donnie/cpp-ops.html

于 2012-06-27T21:40:18.720 回答
1

我想知道以下代码中变量s的类型是什么:

if(s == (test2[l]))

是一个包含用户输入的字符串,例如“A1”?或者是一个MenuItem 对象?

如果它是一个字符串,那么条件就是

if(s == test[l].getCode())

如果s是 MenuItem 对象,那么您应该为 MenuItem 对象实现operator==

它的签名可能看起来像这样:

bool operator== (const MenuItem&, const MenuItem&);

并且实现将涉及检查两个 MenuItem 对象是否具有相同的代码、名称和价格。

于 2012-06-28T01:27:03.770 回答