0

所以基本上我试图重载加号运算符,以便它加起来 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;
}
4

3 回答 3

1

你已经转换coinssum ()

更新

temp.coins = (coins + param.coins) * 0.01;

temp.coins = coins + param.coins;

而且输出语句错误,你.自己打印

cout << total.sum() << endl;
于 2013-10-09T01:24:38.743 回答
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.

顺便说一句,你并不愚蠢。每个大师都曾经是初学者。

于 2013-10-09T01:34:48.203 回答
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 类型

于 2013-10-09T01:33:30.380 回答