【发布时间】:2015-02-25 04:50:28
【问题描述】:
当我完成 Money Class 项目时,剩下一条指令,即使用按位运算符 ^ 对两个 Money 对象进行四舍五入。
在我的头文件中,我有:
#ifndef MONEY_H
#define MONEY_H
#include <iostream>
using namespace std;
class Money{
public:
Money(int dollars, int cents);
Money(int dollars);
Money();
int getDollars() const {return dollars;};
int getCents() const {return cents;};
void setDollarsAndCents(int dollars, int cents);
double getAmount() const {return dollars + cents / 100.0 ;};
void setAmount(double amount);
//Define bit wise operator
friend Money operator^(const Money& firstAmount, const Money& secondAmount);
//Define the input and output operator
friend istream& operator>>(istream& inputStream, const Money& money);
friend ostream& operator<<(ostream& outStream, const Money& money);
private:
int dollars, cents;
double amount;
};
const Money LOONIE = Money(1 , 0);
const Money TOONIE = Money(2 , 0);
const Money QUARTER = Money(0 , 25);
const Money DIME = Money(0 , 10);
const Money NICKEL = Money(0 , 5);
#endif
在我的实现文件中:
#include "Money.h"
// Construct a money object with dollars and cents
Money::Money(int newDollars, int newCents)
{
dollars = newDollars;
cents = newCents;
amount = dollars + cents/100.0;
}
// Construct a money object with JUST the dollars
Money::Money(int newDollars)
{
dollars = newDollars;
cents = 0;
amount = dollars + cents;
}
// Construct a money object with no arguments (default amount = 0)
Money::Money()
{
amount = 0.0;
}
// Set dollars and cents
void Money::setDollarsAndCents(int newDollars, int newCents)
{
dollars = newDollars;
cents = newCents;
amount = dollars + cents/100.0;
}
// Set monetary amount
void Money::setAmount(double newAmount)
{
amount = newAmount;
}
// Round up first Money object to the nearest second Money object
Money operator^(const Money& firstAmount, const Money& secondAmount)
{
int finalDollars = firstAmount.dollars + secondAmount.dollars);
firstAmount.cents += secondAmount.cents/2;
return Money(finalDollars, ((firstAmount.cents/secondAmount.cents)*secondAmount.cents));
}
// Define the input operator
istream& operator>>(istream& inputStream, const Money& money)
{
inputStream >> money.dollars >> money.cents;
return inputStream;
}
// Define the output operator
ostream& operator<<(ostream& outputStream, const Money& money)
{
outputStream << money.dollars << "." << money.cents;
return outputStream;
}
注意:我认为我不需要做int finalDollars,因为我没有四舍五入到最接近的美元。
终于进入我的主线:
#include "Money.h"
int main()
{
//Test round-off operator ^
Money m14(4 , 19); //round off to the nearest nickel : $4.19 = $4.20
cout << (m14 ^ NICKEL) << endl;
Money m15(-3, -1); //round off to the nearest nickel : $-3.01 = $-3.00
cout << (m15 ^ NICKEL) << endl;
return 0;
}
Output: 4.22
-2.-106
编辑:太兴奋了,我忘记了问题
如果有人可以帮助我说明哪里出了问题以及为什么我得到了错误的输出,那将不胜感激。谢谢!
【问题讨论】:
-
@JohnKugelman 编辑:抱歉!
-
@ArcRanges 好吧,您仍然无法提供MCVE。
-
@πάνταῥεῖ 对所有的混乱感到抱歉。现在一切都应该在那里。
-
基本上这个:
unsigned int finalCents = (firstAmount.cents ^ secondAmount.cents);对舍入没有意义。你知道异或运算符是做什么的吗? -
@MichaelBurr 可以请教一下吗?
标签: c++ operator-overloading rounding