0

したがって、基本的には、plus 演算子をオーバーロードして、価格 1 (1, 99) と価格 2 (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

あなたはすでに改宗coinsしています。sum ()

アップデート

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 に答える