簡體   English   中英

C ++重載加法無法正常工作

[英]C++ overloading addition not working correctly

因此,基本上,我試圖重載plus運算符,以使其加起來對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;
}

您已經轉換了sum () coins

更新

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

temp.coins = coins + param.coins;

並且輸出語句錯誤,您可以打印. 由你自己

cout << total.sum() << endl;

好奇為什么要使用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

順便說一句,你不傻。 每個大師都是一個初學者。

你應該更新

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類型

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM