Home > database >  how to apply operator overloading for unary postfix operator
how to apply operator overloading for unary postfix operator

Time:03-02

below is code for operator overloading for unary operator

#include <iostream>
using namespace std;
 
class Distance {
   private:
      int feet;             // 0 to infinite
      int inches;           // 0 to 12
      
   public:
      // required constructors
      Distance() {
         feet = 0;
         inches = 0;
      }
      Distance(int f, int i) {
         feet = f;
         inches = i;
      }
      
      // method to display distance
      void displayDistance() {
         cout << "F: " << feet << " I:" << inches <<endl;
      }
      
      // overloaded minus (-) operator
      Distance operator   () {
         feet = feet 1;
         inches = inches 1;
         
         return Distance(feet, inches);
      }
};

int main() {
   Distance D1(11, 10), D2(-5, 11);
 
     D1;                     // increment by 1
   
   D1.displayDistance();    // display D1

     D2;                     // increment by 1
   D2.displayDistance();    // display D2

   return 0;
}

when I use above code then I can successfully use prefix operator D1 and D2 but I am not getting how to overload postfix operator D1 and D2 even if I try these in above code it showing me error so how can we use concept of operator overloading for postfix and prefix separately?

CodePudding user response:

For postfix operator you have to specify an extra(unused) parameter of type int as shown below:

class Distance {
   
      //other code as before
      public:
      Distance operator  (int);//declaration for postfix operator  
};

//other code as before 

//definition for postfix operator  
Distance Distance::operator  (int)
{    
    Distance ret = *this;   // save the current value
    
      *this;     // use prefix   
    return ret;  // return the saved state
}

See DEMO.

Explanation

There is a problem when defining both the prefix and postfix operators because both of these versions use the same symbols, meaning that the overloaded versions of these operators have the same name. Moreover, they also have the same number and type of operands.

So to solve this problem, the postfix version take an extra parameter of type int. And when we use the postfix operator, the compiler automatically/implicitly supplies 0 as the argument for this parameter.

CodePudding user response:

if you want post-inc/dec then the code will be :

  Distance operator   (int) {
     feet = feet 1;
     inches = inches 1;
     
     return Distance(feet, inches);
  }

we use int in formal parameter . it is just crate different between post/pre-fix. The prefix form of the operator is declared exactly the same way as any other unary operator; the postfix form accepts an extra argument of type int.

  • Related