954,492 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

Pos/Pre fix operator overloading question.

Hello everyone. I have been reading c++ in the book "C++ : A beginners Guide" and I have some questions about overloading a unary operator.

This is the code I have been working on/trying to understand :

/* Demonstrating overloading a unary operator
with a friedn function(prefix and postfix) */
#include
using namespace std ;

class ThreeD {
int x, y, z ;
public:
ThreeD( ) { x = y = z = 0 ; }
ThreeD(int i,int j,int k) { x = i ; y = j ; z = k ; }
friend ThreeD operator++(ThreeD &op1) ;
friend ThreeD operator++(ThreeD &op1,int notused) ;
void show( ) ;
} ;

ThreeD operator++(ThreeD &op1)
{
op1.x++ ;
op1.y++ ;
op1.z++ ;
return op1 ;
}

ThreeD operator++(ThreeD &op1, int notused)
{
ThreeD temp = op1 ;
op1.x++ ;
op1.y++ ;
op1.z++ ;
return temp ;
}

void ThreeD::show( )
{
cout << x << ", " << y << ", " << z << "\n\n" ;
}

int main( )
{
ThreeD a(1,2,3) ;
ThreeD b ;

cout << "Original a value : " ;
a.show( ) ;
++a ;
cout << "a after ++a : " ;
a.show( ) ;

cout << "Original b value : " ;
b.show( ) ;
b = a ;
cout << "b after b = a : " ;
b.show( ) ;
b++ ;
cout << "b after b++ : " ;
b.show( ) ;

return 0 ;
}

This is the question i have about this program and pre/post fix operator overloading concept :

Question : Why does the prefix/postfix version of the
operator overloaded function have to return a value ?
I don't understand why a value should be returned yet it is
a reference.

Your help will be appreciated.
Thank You.

coachHinesfan
Light Poster
32 posts since Oct 2008
Reputation Points: 10
Solved Threads: 0
 

So you can do things like a = b++ and a = ++b . Chaining and combining expressions accounts for most of the weirdness in how operator overloading works. But you don't have to follow the conventions even though it's a good idea to stick to idioms that everyone expects. Your operators could return void and still work for the basic cases of b++; and ++b; .

Tom Gunn
Master Poster
733 posts since Jun 2009
Reputation Points: 1,446
Solved Threads: 135
 
Dave Sinkula
long time no c
Team Colleague
5,058 posts since Apr 2004
Reputation Points: 2,780
Solved Threads: 314
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You