C++ Operator Overloading tutorial

As we saw in previous chapters, we are able to perform function overloading. Similarly we can also overload operators “+, -, =, *” and we call this concept as operator overloading.

Why do we need operator overloading?

Consider a simple example: Generally we use arithmetic addition operator to add integers. But there comes a case that you need to add or concatenate 2 strings. Or add the data members of 2 different objects of the same class. In such cases you can overload “+” operator with strings or class objects.

Then the compiler will decide on what appropriate function to be called.

Syntax for operator overloading or How to overload operator in C++?

Syntax:

class ClassName
{
	public:

	<return_type> operator <symbol> (arguments)
	{
		//function body
	}
};
For operator overloading, we need to use “operator” keyword.
In the line “<return_type> operator <symbol> (arguments)“.
<return_type> is the return type.
operator” is the keyword used to define operator overloading
<symbol> symbol is the operator symbol you need to override like “+, -, =, *”
arguments: They are the arguments that you are passing to the function.

Points to remember for operator overloading in C++:

1. Operator overloading can be used to work with user-defined types only (class, structures). It cannot be used for built-in types.
2. Below operators cannot be overloaded in C++:
::, . , .*, ?:
3. Compiler will automatically override = and & operators by default.
Let us understand operator overloading with help of few examples:

1. Simple “++” operator overloading.

#include <iostream>
using namespace std;

class MyClass
{
    private:
        int num;
    
    public:
        MyClass(): num(5){ }
    
    void operator ++ ()
    {
        cout<<"The value of num before increment is "<<num<<endl;
        num = num + 1;
        cout<<"The value of num after increment is "<<num<<endl;
    }
};

int main(void)
{
    MyClass obj;
    
    ++obj;
}

Output:

The value of num before increment is 5
The value of num after increment is 6

2. Simple “+” operator overloading, adding data members from 2 different objects.

#include <iostream>
using namespace std;

class MyClass
{
    private:
        int num_1;
        int num_2;
    
    public:
        MyClass(int a, int b): num_1(a), num_2(b){ }
    
    friend MyClass operator + (MyClass &obj1, MyClass &obj2);
    
    void display()
    {
        cout<<"The value of num_1 "<<num_1<<" The value of num_2 "<<num_2<<endl;
    }
};

MyClass operator + (MyClass &obj1, MyClass &obj2)
{
    return MyClass(obj1.num_1+obj2.num_1, obj1.num_2+obj2.num_2);
}

int main(void)
{
    MyClass obj_1(10, 20);
    MyClass obj_2(30, 40);
    
    MyClass obj_3 = obj_1 + obj_2;
    
    obj_3.display();
}

Output:

The value of num_1 40 The value of num_2 60
Write a Comment

Leave a Comment

Your email address will not be published. Required fields are marked *