我需要有关创建运算符(operator)重载函数的帮助。我尝试了2次,但卡住了。(感谢大家上次的帮助!我能够完全完成:])。 问题1:运算符+(const Currency&rhs)将加上2美元的金额,但不会加上2美分的金额,尽管会保留其中的1美分。因此,40.20 + 40.20 = 80.20(40美元和20美分分别输入为“int”,出于可读性显示目的,如上所述编写,抱歉!)//删除了减法(如果删除了重载运算符,程序将正确地添加/减去)。 问题2:在我拥有整数美元和整数美分之前,现在我只有“金额”了。我猜我需要传递这两个,然后将它们加在一起作为一个成本[货币/金额],然后将它们返回为“金额”并使用该金额?*我不太确定,这是我卡住的另一个原因: (。如果需要,我可以发布先前任务的原始公共(public)成员。现在,我已经离开了上一个任务的公共(public)成员的所有旧功能。class Currency{private:int Dollars;int Cents;//string Amount;上市: //构造函数 货币(int Dollars = 0,int Cents = 0); friend 货币运算符+(货币,货币常量&); //加法// Getint GetDollars();// Need to be removedint GetCents();// Need to be removed};货币::货币(美元,国际分){ this-> Dollars = Dollars; this-> Cents = Cents;if(this->Cents >= 100){ this->Dollars += 1; this->Cents -= 100;}}货币运算符+(左货币,货币常量和右货币){ left.Dollars + = right.Dollars; left.Cents + = right.Cents; 一会儿(左> 100分) { 分数-= 100; 美元+ = 1; } 返回左;}int货币:: GetDollars(){ 返回美元;}int货币:: GetCents(){ 返回美分;}int main(){int currDollars;int currCents;//char answer;cout << "Please enter a dollar amount" << endl;cin >> currDollars;cout << "Please enter a cents amount:" << endl;cin >> currCents;// Creating and initalizing objects instances of Currency classCurrency payroll(currDollars, currCents);Currency payroll2(currDollars, currCents);Currency payroll3;// Testing overloaded opertator+payroll3 = payroll + payroll2;// Displaying test resultscout << "Payroll3 Amount:$ " << payroll3.GetDollars() << "."<< payroll3.GetCents() << endl << endl;return 0;} 最佳答案 好的,现在我们只有很少的代码可以实际查看,一些建议。首先,我想我只有一个加法运算符:Currency operator+(Currency const &c);将其与右侧的美元和美分相加,然后返回结果。如果允许的话,最好使用全局运算符重载(大概这是家庭作业,因此您可能不会...):Currency operator+(Currency left, Current const &right) { left.Dollars += right.Dollars; left.Cents += right.Cents; while (left.Cents >= 100) { left.Cents -= 100; left.Dollars += 1; } return left;}请注意,这使用了一个小“技巧”​​-它按值传递了左操作数,因此我们收到的“左”是作为左操作数传递的值的副本。我们将修改并返回该对象。我也只有一个构造函数,使用默认参数作为数量:Currency(int dollars = 0, int cents = 0);这样,如果您不指定金额,您将获得$ 0.00,但是您可以指定美元(或美元和美分),而无需重复处理三个代码的代码。通过将两者结合起来,您仍然可以执行类似添加1的操作,但是处理方式略有不同-与其直接使用带有单个int的operator+,不如直接使用int,而是使用int将其转换为Currency对象ctor,然后将该Currency对象添加到另一个对象中。您的代码变得更短,并且(尤其是)重复性大大降低。无需尝试测试/验证三个不同的加法运算符,而是只需在一个地方处理一段代码即可。我要添加到真实版本中的一件事在此处的精简版本中并不明显。我将上面的while循环分离为一个名为normalize或类似名称的单独(私有(private))函数,然后将其从operator+和operator-中使用(如果您添加了operator*和/或operator/,可能还包括它们)。我还将消除GetCents和GetDollars成员,而不是添加一个重载的operator<<以直接处理Currency对象:std::ostream &operator<<(std::ostream &os, Currency const &c) { return os << c.Dollars << "." << std::setfill('0') << std::setw(2) << std::setprecision(2) << c.Cents;}这样,您可以替换以下代码块: cout << "Current Amount is:$ " << payroll.GetDollars() << "."; if(payroll.GetCents() < 10) {cout << "0";} else cout << payroll.GetCents() << endl; cout << endl;内容更短,更易读: cout << "Current amount is: $" << payroll << endl;编辑:鉴于仅打算将其用于金钱,您可以让Currency对象打印出$本身。如果您想更详细一点,可以让它从语言环境中检索正确的货币代号和小数点分隔符。关于c++ - 作业-运算符重载货币类-卡住/丢失,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5853476/
10-11 01:32