2013-10-09 2 views
0

Так что в основном я пытаюсь перегрузить оператор «плюс», так что он добавляет изменения в price1 (1, 99) и price2 (2, 99). Так что 1,99 + 2,99 должно составлять 4,98 доллара. Код компилируется, но у меня почти есть ответ. Вместо 4.98 это дает 3.1.98, что неверно. Как я могу это исправить? Я открыт для любых предложений или идейНеверное перегрузочное дополнение C++

Вот мой файл заголовка, названный 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; 
} 

ответ

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. –

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 

, кстати, монеты должны быть целого типа

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.

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

Смежные вопросы