Sign in to follow this  
serratemplar

operator+ and operator= overloading

Recommended Posts

I'm trying to make one of my classes behave as one would expect them to with these operators, but I'm not sure what I'm doing is working...so I thought I'd post my functions and see if anyone thought they were clearly wrong for some reason.
cOdds cOdds::operator+(const cOdds &c)
{
	wins = wins + c.wins;
	losses = losses + c.losses;
	ties = ties + c.ties;
	hands = hands + c.hands;	
}

cOdds cOdds::operator=(const cOdds &c)
{
	wins = c.wins;
	losses = c.losses;
	ties = c.ties;
	hands = c.hands;
}

I'm under the impression that the "this" operator is implicit, and that I needn't "return" anything in either function, because they are constructors...I think? I'm confused =) Thank you for your time.

Share this post


Link to post
Share on other sites
Your operator+ looks like it's behaving more like an operator+=

And both of these should return references to *this.


cOdds & cOdds::operator+=(const cOdds & c)
{
...

return *this;
}

cOdds & cOdds::operator=(const cOdds & c)
{
...

return *this;
}

cOdds operator+(const cOdds & lhs, const cOdds & rhs)
{
return cOdds(...);
}


Share this post


Link to post
Share on other sites
I've made the modifications you suggested to my operator=, however when I make those modifications to operator+ I get:

main.cc:746: error: ‘cOdds cOdds::operator+(const cOdds&, const cOdds&)’ must take either zero or one argument

Possibily your definition for operator+= is intended for operator+?

Share this post


Link to post
Share on other sites
Out of curiosity, did these snippets compile with no whining about "'cOdds::operator+' must return a value." ? As it is, they most definitely need to. The first implementation would be more indicative of the '+=' operator. (The left hand cOdds becomes itself "+" the right hand cOdds, which would make use of the implicit "this" pointer. It still needs to return the final result, though, to be consistent with built-in type standards)

What you're looking for, I think, is something like this, depending on how your constructors are set up:
cOdds cOdds::operator +(const cOdds& rhs)
{
cOdds ret;
ret.m_nLosses = m_nLosses + rhs.m_nLosses;
ret.m_nWins = m_nWins + rhs.m_nWins;
return ret;
}

cOdds cOdds::operator =(const cOdds& rhs)
{
m_nLosses = rhs.m_nLosses;
m_nWins = rhs.m_nWins;
return *this;
}


Overloaded constructors could make them much simpler, even one-liners, but that's the gist. From there and what you've started on, you should be able to give these and the "+=" a solid go.

Hope this helps!
-jouley

[Edit: Oh-so-beaten.]

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this