Перегрузка C ++ не работает правильно

0

Поэтому в основном я пытаюсь перегрузить оператор "плюс", так что он добавляет изменения в цене1 (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;
}
Теги:
visual-studio
operator-overloading

3 ответа

1
Лучший ответ

Вы уже конвертировали coins в sum().

Обновить

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

в

temp.coins = coins + param.coins;

И выходной оператор ошибочен, вы печатаете . самостоятельно

cout << total.sum() << endl;
  • 0
    Я пробовал это, но выходит 3.198, а не 4.98. Я не хочу отображать 198 центов, хотя все, что выше 99 центов, должно стать долларом
  • 0
    Хм, пошагово пройдитесь по коду. Он печатает 3.198, потому что банкноты = 3 и монеты = 198.
1

Любопытно, почему вы используете double за гроши. У вас обычно нет фракций пенни, кроме как при оплате бензина, поэтому int будет иметь больше смысла.

Несколько примечаний:

Как temp.coins = coins + param.coins; выше, обязательно выполняйте только 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.

И, кстати, ты не тупой. Каждый мастер был когда-то новичком.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню