Operator Overloading gives special meaning to the Operator in c++.
A normal c++ Operator acts in a special way to a newly defined datatype.
The advantage of Operator overloading is to perform different operations on the same operand.

The syntax to declare Operator Overloading is :
return_type operator op (argument_list)
{
// body of the function.
}Return type is the type of value returned by the function.
operator is a Keyword.
op is an operator symbol that you want to overload.
Here’s an example of an Operator Overloading.
void operator + ()
{
// body of the function.
}Some operators are not used for overload :
- ( . and .* ) class member access operator
- ( :: ) scope resolution operator
- ( sizeof ) sizeof operator
- ( ?: ) conditional operator
Also read this :- what is class and object in c++
Rules for Operator Overloading
Existing operators can only be overloaded, but the new operators cannot be overloaded.
The overloaded operator contains at least one operand of the user-defined data type.
We cannot use the friend function to overload certain operators. However, the member function can be used to overload those operators.
When unary operators are overloaded through a member function take no explicit arguments, but, if they are overloaded by a friend function, takes one argument.
When binary operators are overloaded through a member function takes one explicit argument, and if they are overloaded through a friend function takes two explicit arguments.
Example of the unary operator ‘-‘ in Operator overloading C++.
#include <iostream>
using namespace std;
class xyz
{
  int a, b, c;
  public:
  void getdata(int p, int q, int r)
  {
   a = p;
   b = q;
   c = r;
  }
  void operator - ()
  {
   a = -a;
   b = -b;
   c = -c;
  }
  void putdata()
  {
   cout<< a << ", " << b << ", " << c << endl;
  }
};
int main()
{
  xyz x1;
  x1.getdata(10, 15, 20);
  cout<<" X1 = ";
  x1.putdata();
  -x1; // calling statement
  cout<<" X1 = ";
  x1.putdata();
  return 0;
}output
X1 = 10, 15, 20 X1 = -10, -15, -20
Example of binary operator ‘+’ in Operator overloading C++
#include<iostream>
using namespace std;
class complex
{
public:
  float x,y;
  complex(){};
  complex(float real, float imag){
   x = real; y= imag;
  }
  complex operator+(complex);
  void display(void);
};
complex complex :: operator+(complex c)
{
  complex temp;
  temp.x = x + c.x;
  temp.y = y + c.y;
  return(temp);
}
void complex :: display(void)
{
  cout<< x <<" + "<< y << "n";
}
main(){
  complex c1,c2,c3;
  c1 = complex(2.5, 3.5);
  c2 = complex(1.6, 2.7);
  c3 = c1 + c2;
  cout<< "c1 = ";
  c1.display();
  cout<< "c2 = ";
  c2.display();
  cout<< "c3 = ";
  c3.display();
  return(0);
}output
c1 = 2.5 + 3.5 c2 = 1.6 + 2.7 c3 = 4.1 + 6.2