创建货币数据类型C ++

时间:2011-04-30 04:49:12

标签: c++ integer currency

我的家庭作业是创建一个名为Currency的类,使用整数作为美元的基本类型。我必须使用这些公共方法..... 现在我删除了“美分”部分和“减法”部分,因为我假设一旦我弄清楚如何为“美元”货币类型做“加法”,我就可以做到。

无论我把什么投入“货币添加(int Dollars);”我无法让我的代码工作=。 我做过诸如totalDollars + = Dollars,return totalDollars,或者只是美元+ =美元等等。

输出总是垃圾:“ - 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 个答案:

答案 0 :(得分:2)

好的,我们在这里有一个范围问题。

由于您的参数和成员都命名为Dollars,您需要使用this-Pointer指定要添加的变量。

this->Dollars += Dollars;

如果不这样做,该参数会隐藏该成员,因此您实际上只是将新金额添加到自身,然后将其丢弃。

答案 1 :(得分:2)

以下是一些可能有用的提示:

在您的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;
}

我希望这有点帮助。

答案 2 :(得分:2)

无论何时用C或C ++,Java或任何语言编写代码,都需要注意变量名称。

这里发生的事情是你在类中使用了Dollars作为变量名,在函数参数中使用了。该参数会覆盖该类,无论您对Add中的Dollars做什么,都不会对类中的Dollars变量产生任何影响。

尝试将Dollars参数重命名为x等描述性内容。

答案 3 :(得分:1)

我认为您不需要在Currency函数中返回Add

您的Add函数应如下所示:

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

答案 4 :(得分:1)

您当前的代码存在许多问题。

  • 当然,您需要两个整数来存储数据。
  • 然后为每个值获取一个get函数。
  • 您认为通过尝试返回货币使您的添加功能过于复杂。不需要,只需将其设置为无效并将输入的金额添加到整数值。
  • 你需要处理超过100的美分。 56 + 56 = 112美分......
  • 您没有提到可能需要执行的数据验证。例如。禁止alpha和其他垃圾,不允许美分值&gt; 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;
}