Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Rules for operator overloading in C++
Operator overloading in C++ is the feature that allows you to define how operators will behave for user-defined data types like classes and structures. Operator overloading and function overloading both support compile-time polymorphism.
In the following article, we will learn the rules that need to be followed for operator overloading.
Rules for Operator Overloading
- Only built-in operators can be overloaded. If some operators are not present in C++, we cannot overload them.
- The arity of the operators cannot be changed.
- The precedence and associativity of the operators remain the same and cannot be changed.
- The overloaded operator cannot hold the default parameters except the function call operator "()".
- We cannot overload operators for built-in data types. At least one user-defined data type must be there.
- The assignment "=", subscript "[]", function call "()", and arrow operator "->" are operators that must be defined as member functions, not friend functions.
- Some operators like assignment "=", address "&", and comma "," are by default overloaded.
- A few operators that cannot be overloaded at all are scope resolution (::), member access (.), sizeof, typeid, decltype, etc.
Steps to Overload Operators in C++
General basic steps for operator overloading are given with the following rules given above.
- First, choose the operator you want to overload, and then define the class that will use the overloaded operator.
- Now, declare the operator function that will overload the operator using the "operator" keyword, followed by defining.
- Define it as a member function if unary operators and the left operand is the object.
- Define it as a friend function for binary operators if the left operand is not an object.
- Then implement the function logic.
Example
Here is the following example code for operator overloading.
#include <iostream>
using namespace std;
class sum {
private:
int real, imag;
public:
// Constructor
sum(int r = 0, int i = 0) : real(r), imag(i) {}
// Overload the '+' operator
sum operator+(const sum& other) {
sum result;
result.real = this->real + other.real;
result.imag = this->imag + other.imag;
return result;
}
// Function to display the complex number
void display() {
cout << real << " + " << imag << "i" << endl;
}
};
int main() {
sum c1(3, 4), c2(1, 2);
sum c3 = c1 + c2; // using overloaded '+' operator
cout << "Sum of complex numbers: ";
c3.display();
return 0;
}
Output
Sum of complex numbers: 4 + 6i
Explanation
In this given program, the operator overloading is used to redefine the behavior of the + operator. Normally, this operator only adds built-in types like integers or floats, but in this class named sum, it allows two sum objects (c1 and c2) to be added directly using c1+ c2. Here, operator+ performs addition by adding the real and imaginary parts of the two objects and returns a new sum object as a result.