2013-02-22 6 views
0

Привет всем У меня есть необычная проблема. Я написал класс moneychanger, который определяет количество векселей и монет, которые указаны как изменения, исходя из общей суммы покупки и суммы денег, предоставленной для покупки. Например, если вы собираетесь купить что-то за 12,04 доллара США и дали счет за 20 долларов США, вы получите 7,96 доллара за изменение.Использование указателей в классе

выход будет:

0 twenty dollar bill(s) 
0 ten dollar bill(s) 
1 5 dollar bill(s) 
2 1 dollar bills(s) 
3 quarter(s) 
2 dime(s) 
1 penny(s) 

теперь дело в том, что я должен вернуть номера каждого счета и монеты с использованием указателей или ссылок.

моя программа имеет две функции: GetBills, которая использует указатели для целых чисел, чтобы вернуть количество счетов в размере 20, 10, 5 и 1 доллара, которые необходимы для изменения.

другой - это GetCoins, который снова использует указатели для целых чисел, чтобы вернуть количество кварталов, никелей и пенни, которые необходимы для изменения.

Моя проблема в этом. мои GetBills не сохраняют никаких значений в указателях, но мои GetCoins. если я вхожу 12,04 за ценой покупки и 20.00 данной суммы мой выход:

0 twenty dollar bill(s) 
0 ten dollar bill(s) 
0 5 dollar bill(s) 
0 1 dollar bills(s) 
3 quarter(s) 
2 dime(s) 
1 penny(s) 

так, как вы можете увидеть некоторые значения для монет хорошо, но не для счетов. Что может привести к тому, что мои указатели в моей GetBills не сохранят правильные значения?

вот мой укороченный код:

MoneyChanger.h

class MoneyChanger 
{ 
private: 
double amountP, amountG, totalChange; 
int twenty, ten, five, one, change; 
int quarter, dime, nickel, penny; 
public: 
void GetBills(int *twenties, int *tens, int *fives, int *ones); 
void GetCoins(int *quarters, int *dimes, int *nickels, int *pennies); 
}; 

MoneyChanger.cpp

void MoneyChanger::setData(double pp, double given) 
{ 
amountP = pp; 
amountG = given; 
CalcChange(); 
} 
void MoneyChanger::CalcChange() 
{ 
while(totalChange >= 20){totalChange = totalChange-20; twenty++;} 
while(totalChange >= 10){totalChange = totalChange-10; ten++;} 
while(totalChange >= 5){totalChange = totalChange-5; five++;} 
while(totalChange >= 1){totalChange = totalChange-1; one++;} 
while(totalChange >= .25){totalChange = totalChange-.25; quarter++;} 
while(totalChange >= .10){totalChange = totalChange-.10; dime++;} 
while(totalChange >= .05){totalChange = totalChange-.05; nickel++;} 
while(totalChange >= .01){totalChange = totalChange-.01; penny++;} 

} 
double MoneyChanger::GetTotalChange() 
{ 
totalChange = amountG - amountP; 
    return totalChange; 
} 
void MoneyChanger::GetBills(int *twenties, int *tens, int *fives, int *ones) 
{ 
*twenties = twenty; 
*tens = ten; 
*fives = five; 
*ones = one; 
CalcChange(); 
} 
void MoneyChanger::GetCoins(int *quarters, int *dimes, int *nickels, int *pennies) 
{ 
*quarters = quarter; 
    *dimes = dime; 
*nickels = nickel; 
*pennies = penny; 
CalcChange(); 
} 

main.cpp

+0

да, извините, не положил его здесь , не хотел, чтобы это было слишком долго »MoneyChanger :: MoneyChanger() { \t amountP = 0.0; \t количествоG = 0.0; \t totalChange = 0.0; \t Двадцать = 0; \t десять = 0; \t 5 = 0; \t one = 0; \t quarter = 0; \t dime = 0; \t nickel = 0; \t penny = 0; } ' –

ответ

0

Я думаю, что ваша проблема в GetBills и GetCoins Функция CalcChange должна быть вызвана первой, перед назначением. Предполагая, что вы инициализировали переменные-члены счета/монеты до 0, первый вызов GetBills устанавливает все переданные в счетах значения 0. Ваша функция затем вычислит, каковы должны быть значения векселей и монет. При вызове GetCoins переменные члена монеты уже будут установлены на правильные значения из вызова CalcChange в GetBills.

Я рекомендовал бы вытягивать calcChange из обоих этих функций (как несколько вызовов она избыточна) и сделать некоторые вещи, как это в ваш главный:

cout<<"Your change is: "<<mc.GetTotalChange()<<"\n\n"; 

mc.calcChange(); 

mc.GetBills(&twenties, &tens, &fives, &ones); 
mc.GetCoins(&quarter, &dimes, &nickels, &pennies); 
+0

Спасибо! я бы никогда не понял это! –

+0

очень хороший информация тоже. Я обязательно буду помнить об этом в будущем. @Robert Prior –

+0

проблема в том, что наш расчет должен быть закрытым! –

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