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<iostream>
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.

Edited 3 Years Ago by Reverend Jim: Fixed formatting

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; .

This article has been dead for over six months. Start a new discussion instead.