所以基本上我试图重载加号运算符,以便加上price1(1,99)和price2(2,99)的变化。所以1.99 + 2.99应该等于4.98美元。代码编译,但我几乎有答案。而不是4.98,它给出3.1.98,这是不对的。我怎样才能解决这个问题?我对任何建议或想法持开放态度
这是我的标题文件,名为MyClass.h:
#pragma once
class MyClass
{
public:
int bills;
double coins;
MyClass (int, int);
double sum () { return (bills + (coins * 0.01)); }
MyClass operator+ (MyClass);
MyClass(void);
~MyClass(void);
};
和我的源文件:
#include <iostream>
#include <string>
#include "MyClass.h"
using namespace std;
MyClass::MyClass(void)
{
}
MyClass::~MyClass(void)
{
}
MyClass::MyClass(int d, int c)
{
bills = d;
coins = c;
}
MyClass MyClass::operator+ (MyClass param) {
MyClass temp;
temp.bills = bills + param.bills;
temp.coins = (coins + param.coins) * 0.01; //Here is the problem, I think
return temp;
}
void main()
{
MyClass price1 (1, 99);
MyClass price2 (2, 99);
MyClass total;
total = price1 + price2;
cout << total.bills << "." << total.coins << endl;
}
答案 0 :(得分:1)
您已在coins
已转换sum ()
。
更新
temp.coins = (coins + param.coins) * 0.01;
到
temp.coins = coins + param.coins;
输出声明错误,您自己打印.
cout << total.sum() << endl;
答案 1 :(得分:1)
很好奇你为什么使用double
来赚钱。除了支付汽油费之外,你通常不会有几分钱,所以int
会更有意义。
注意事项:
如上所述,请务必仅执行temp.coins = coins + param.coins;
。
你没有转移硬币的价值,只是转移便士的数量。
另外,携带便士! 199美分是1美元99美分。这应该转化为类似
的内容int totalCoins = coins + param.coins;
temp.bills = bills + param.bills + totalCoins / 100;
temp.coins = totalCoins % 100;
假设您已将硬币转换为int
。
顺便说一下,你并不傻。每个主人都曾经是初学者。
答案 2 :(得分:0)
你应该更新
temp.bills = bills + param.bills;
temp.coins = (coins + param.coins) * 0.01;
要
temp.bills = bills + param.bills + (coins + param.coins) / 100
temp.coins = (coins + param.coins) % 100
顺便说一句,硬币应该是int类型