operator+ overloading

Wes Freeman freeman.wes at gmail.com
Wed Jan 11 19:29:13 CET 2012


What does your constructor look like in your Money class? Do you do
mpz_init() for your monetaryUnit member?

Wes

On Wed, Jan 11, 2012 at 9:54 AM, Slava Feshchenko <slavaf2000 at gmail.com> wrote:
> I am building a class (called Money)  for handling monetary values and use
> GNU MP as a back end for the calculations. I can't seem to be able to
> overload operator+. I want very straight forward behavior:
>
> Money a;
> Money b;
> Money c;
>
> .... (set a and b to some values)
>
> c = a + b; //this should set c to the sum of a and b and leave a and b
> unmodified
>
> The Money class has a private data member declared as follows:
>
> mpz_t monetaryUnit;
>
> which maintains the amount of money in cents. So operator+ would be summing
> the values maintained in this variable and assigning it to c.monetaryUnit.
> I already overloaded operator= and it works as expected. The Money class
> has a constructor which calls mpz_init(monetaryUnit) and a destructor,
> which calls mpz_clear(monetaryUnit);
>
> The broken code for operator+ is as follows:
>
> Money & Money::operator+(Money &m)
> {
> Money temp;
> mpz_add(temp.monetaryUnit, this->monetaryUnit, m.monetaryUnit);
> return temp;
> }
>
> In debug mode, this seems to work until the return statement. The code
> correctly sums the values and assign the result to temp.monetaryUnit; Then
> after the return statement, the destructor is called for the object temp,
> which calls mpz_clear(monetaryUnit). After this call, the value in
> temp.monetaryUnit is something ridiculous like 123198732346827429374
> (instead of the sum of a and b). And this is the value that gets assigned
> to c in the end. What am I missing? What's wrong with my destructor if
> that's where the issue is? Please help!!
>
> If you need more details on the implementation, please let me know. Also
> note that I typed the code above right in the email, and not copied from
> the actual source code... so please ignore any syntax issues.
>
> Sincerely,
>
> SF


More information about the gmp-discuss mailing list