Создать тип данных валюты C ++ - PullRequest
1 голос
/ 30 апреля 2011

Мое домашнее задание - создать класс с именем Currency, используя целые числа в качестве примитивного типа для долларов.И я должен использовать эти публичные методы, которые у меня есть ... Теперь я удалил часть "центов" и часть "вычитания", потому что я предполагаю, что смогу сделать это, как только выясню, как сделать "сложение" дляТип валюты «доллары».

Независимо от того, что я положил в «Добавить валюту (в долларах)»;Я не могу заставить мой код работать =.Я сделал такие вещи, как totalDollars + = Dollars, return totalDollars или просто Dollars + = Dollars и т. Д.

Вывод всегда является мусором: "-8353513636".Или иногда любое число, которое я вставляю в конструктор.

Я просто не могу заставить его ПРОЙТИ число и сохранить его (в конце концов хочу, чтобы оно содержало промежуточную сумму), и вывести его, когда яЯ сделалЯ сократил свой код, потому что единственная проблема с моим кодом - части, связанные с типом данных "класс" / валюта.Это просто не будет работать.

В какой-то момент мне сказали, что он не может конвертировать из типа int в тип данных Currency

Вот код, который у меня есть:

/* Program By: 
    Date: 4/29/2011
    Class: 



*/

#include <iostream>
#include <iomanip>
#include <fstream>
#include <cstring>
#include <cstdlib>
#include <cctype>
#include <cmath>
#include <ostream>

using namespace std;

// Currency Class

class Currency
{
private:

    int Dollars;

public:
    Currency();
    Currency(int Dollars);
    Currency Add(int Dollars);
    int GetDollars();
};

Currency::Currency()
{
    Dollars = 0;
}

Currency::Currency(int Dollars)
{
}

// Add
Currency Currency::Add(int Dollars)
{ 
 // Have put totalDollars += Dollars, etc.
// Have also put a "return" value here.
}

int Currency::GetDollars()
{
    return Dollars;
}


int main()

{
    Currency payroll;

    int  currDollars;

    cout << "Please enter a dollar mount" << endl;
    cin >> currDollars;

    payroll.Add(currDollars);

    cout << "Current Amount is: " << payroll.GetDollars() << endl;

    return 0;

}

Что я делаю неправильно?Я был в этом в течение нескольких часов, и я должен иметь это к завтрашнему дню =.ПОМОГИТЕ НАМНОГО ЦЕНИТЬ !!!!

Ответы [ 5 ]

2 голосов
/ 30 апреля 2011

Всякий раз, когда вы пишете код на C или C ++, Java или любом другом языке, вам действительно нужно обращать внимание на имена ваших переменных.

С вами произошло то, что вы использовали Dollars в качестве переменнойимя внутри класса, и в параметре функции.Параметр переопределяет класс, и все, что вы делаете с Dollars внутри Add, никогда не влияет на переменную Dollars внутри класса.

Попробуйте переименовать параметр Dollars во что-то описательное, например x.

2 голосов
/ 30 апреля 2011

Хорошо, у нас есть проблема с областью видимости.

Поскольку ваш параметр и член оба называются Dollars, вам нужно использовать this-Pointer, чтобы указать, к какой переменной вы хотите добавить.

this->Dollars += Dollars;

Если вы этого не сделаете, параметр скрывает элемент, так что вы фактически просто добавляете новую сумму к себе и затем отбрасываете ее.

2 голосов
/ 30 апреля 2011

Вот несколько советов, которые могут помочь:

В вашем классе Currency я бы рекомендовал использовать соглашение об именах, чтобы вы могли отличать переменные-члены от аргументов в конструкторе и функциях.Кажется, что может быть некоторая путаница в разграничении вашей Dollars переменной-члена и аргументов, которые также называются Dollars.Одно из возможных соглашений об именах - именовать переменные-члены "my", потому что они принадлежат классу.Есть и другие способы справиться с этой ситуацией, используя указатель this, но вы, возможно, еще не узнали об указателях.

class Currency
{
private:

    int myDollars;

public:
    Currency();
    Currency(int dollars);
    void Add(int dollars); // changed this to return void - see below
    int GetDollars();
};

Другая проблема, которую я вижу, состоит в том, что ваши функции, принимающие аргумент int Dollarsпохоже, ничего не делает со значением аргумента.Я знаю, что вы пытаетесь понять, как это сделать, поэтому вот пример для функции Add.Что касается Add, я бы сейчас просто вернул void, так что вам не нужно возвращать объект this из функции.

void Currency::Add(int dollars)
{ 
    myDollars += dollars;
}

int Currency::GetDollars()
{
    return myDollars;
}

Надеюсь, это немного поможет.

1 голос
/ 30 апреля 2011

Есть множество проблем с вашим текущим кодом.

  • Вам, конечно, нужны два целых числа для хранения данных.
  • Затем функция get для каждого значения.
  • Вы, я думаю, вы слишком усложнили свою функцию добавления, пытаясь вернуть валюту.Нет необходимости, просто сделайте его недействительным и добавьте введенные суммы к вашим целочисленным значениям.
  • Вам нужно иметь дело с центами, переполняющимися после 100. Например, 56 + 56 = 112 центов ...
  • Вы не упомянули валидацию данных, которую тоже может потребоваться выполнить.Например, запретить альфа и другой мусор и не допускать ввода значений центов> 99.и т. д.

Попробуйте:

class Currency
{
private:
    int m_dollars;
    int m_cents;

public:
    Currency(int dollars, int cents);
    Currency Add(int dollars, int cents);
    int GetDollars();
    int GetCents();
};

Currency::Currency(int dollars, int cents) 
{ 
    m_dollars = dollars; 
    m_cents = cents;
}

Currency Currency::Add(int dollars, int cents)
{ 
    if (m_cents + cents >= 100) 
        return Currency(m_dollars + dollars + 1, m_cents + cents - 100);

    return Currency(m_dollars + dollars, m_cents + cents);
}

int Currency::GetDollars() { return m_dollars; }
int Currency::GetCents() { return m_cents; }

void main()
{
    int currDollars;
    int currCents;

    cout << "Please enter a whole dollar amount:" << endl;
    cin >> currDollars;

    cout << "Please enter a cents amount:" << endl;
    cin >> currCents;

    Currency payroll(currDollars, currCents);

    cout << "Current Amount is: " 
         << payroll.GetDollars() 
         << "."
         << payroll.GetCents()
         << endl;

    cout << "Please enter a whole dollar amount to add:" << endl;
    cin >> currDollars;

    cout << "Please enter cents to add:" << endl;
    cin >> currCents;

    payroll = payroll.Add(currDollars, currCents);

    cout << "Updated Amount is: " 
         << payroll.GetDollars() 
         << "."
         << payroll.GetCents()
         << endl;
}
1 голос
/ 30 апреля 2011

Я не думаю, что вам нужно возвращать Currency в вашей функции Add.

Ваша Add функция должна выглядеть следующим образом:

void Currency::Add(int dollarsToAdd) { Dollars += dollarsToAdd; }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...