Operator overloading with examples in C++

Operator overloading is a type of compile time polymorphism. In which an operator is overloaded for preforming different works on user-defined data type. To overload an operator we can use special type of operator definition. Operator function is defined in public section of class. It may be a member function or friend function of class.   
ऑपरेटर ओवरलोडिंग कम्पाइल टाइम पालीमोर्फिस्म का एक प्रकार है, जिसमे एक ऑपरेटर को यूजर डिफाइंड डाटा टाइप पर एक से अधिक कार्यो को पूर्ण करने के लिए ओवरलोड किया जाता है। किसी ऑपरेटर को ओवरलोड करने के लिए विशेष ऑपरेटर फंक्शन का प्रयोग किया जाता है। ऑपरेटर फंक्शन को क्लास के पब्लिक सेक्शन में परिभाषित किया जाता है यह एक मेम्बर फंक्शन या friend फंक्शन हो सकता है। 
Syntax :- 
return_type class_name :: operator opsymbol (arguments){
                statements;
                ..............
                ..............

Types of operator overloading (ऑपरेटर ओवरलोडिंग के प्रकार):-

1. Overloading unary operator using member function. 
2. Overloading unary operator using friend function.  
3. Overloading binary operator using member function. 
4. Overloading binary operator using friend function. 

Rules of operator overloading (ऑपरेटर ओवरलोडिंग के नियम):-

1. Only built-in C++ operator will overload, no new operator is created.
C++ में केवल बिल्ट इन ऑपरेटर को ही ओवरलोड किया जा सकता है, कोई नया ऑपरेटर ओवरलोड नहीं किया जा सकता है।

2. In overloaded operator at least one argument is user-defined.
ओवरलोड किये हुए ऑपरेटर में कम से कम एक यूजर डिफाइंड आर्गुमेंट होना चाहिए।

3. Fundamental meaning of any operator is not changed like + operator is only used for addition. 
ऑपरेटर के मूलभूत अर्थ को परिवर्तित नहीं किया जा सकता है जैसे + ऑपरेटर केवल जोड़ने के लिए प्रयुक्त किया जावेगा। 

4. Syntax of overloaded operator will same as original operator syntax.
ओवरलोडेड ऑपरेटर का प्रारूप, वास्तविक ऑपरेटर के प्रारूप के सामान ही होगा। 

5. Some operators like ( ), [ ], ->, = can not be overloaded by friend function but it can be overloaded by member function. 
कुछ विशेष ऑपरेटर जैसे ( ), [ ], ->, = को friend फंक्शन से ओवरलोड नहीं किया जा सकता है परन्तु हम इन्हें मेम्बर फंक्शन  का प्रयोग कर ओवरलोड कर सकते हैं।

6. Some special operators like size of ( ), .*, ::, ?: doesn’t take part in operator overloading. 
कुछ विशेष ऑपरेटर जैसे size of ( ), .*, ::, ?: ऑपरेटर ओवरलोडिंग में हिस्सा नहीं लेते है। 

7. If unary operator is overloaded by member function then it will neither accept any argument nor return any value but if we overload unary operator by friend function then it will accept one explicit argument. 
यदि यूनरी ऑपरेटर को मेम्बर फंक्शन द्वारा ओवरलोड किया जाता है तब वह कोई आर्गुमेंट ग्रहण नहीं करता है ना ही कोई वैल्यू रिटर्न करता है परन्तु यदि यूनरी ऑपरेटर को फ्रेंड फंक्शन द्वारा ओवरलोड किया जाता है तब वह एक बाह्य आर्गुमेंट ग्रहण करता है।  

8. If binary operator is overloaded by member function then it will accept one explicit argument and return one value but if binary operator is overloaded by friend function then it will accept two explicit arguments.
यदि बाइनरी ऑपरेटर को मेम्बर फंक्शन द्वारा ओवरलोड किया जाता है तब वह एक बाह्य आर्गुमेंट ग्रहण करता है और एक वैल्यू रिटर्न करता है परन्तु यदि बाइनरी ऑपरेटर को फ्रेंड फंक्शन द्वारा ओवरलोड किया जाता है तब वह दो बाह्य आर्गुमेंट ग्रहण करता है।  

9. When binary operator is overloaded by member function then left side operand must be a class object always.
जब बाइनरी ऑपरेटर को मेम्बर फंक्शन द्वारा ओवरलोड किया जाता है तब बायीं ओर का ऑपरेंड सदैव क्लास ऑब्जेक्ट होना चाहिए। 
  
10. Binary arithmetic operator like +, -, /, % will return one explicit value.
बाइनरी अरिथमेटिक ऑपरेटर जैसे +, -, /, %  बाह्य रूप से एक वैल्यू रिटर्न करेंगे। 

Examples:-

C++ program to overload unary - minus operator for vectors using member function:-

#include<iostream.h>
#include<conio.h>
class vector{
float x,y,z;
public:
vector(){
x=y=z=0;
}
vector(float x1,float y1,float z1){
x=x1;
y=y1;
z=z1;
}
void display(){
cout<<"( "<<x<<")i + ("<<y<<")j + ("<<z<<")k"<<endl;
}
void operator-();
};
void vector::operator-(){
x=-x;
y=-y;
z=-z;
}
void main(){
vector v1(3,7,5);
clrscr();
v1.display();
//Unary Operator Overloading
-v1;
v1.display();
getch();
}

C++ program to overload unary - minus operator for vectors using friend function:-

#include<iostream.h>
#include<conio.h>
class vector{
float x,y,z;
public:
vector(){
x=y=z=0;
}
vector(float x1,float y1,float z1){
x=x1;
y=y1;
z=z1;
}
void display(){
cout<<"( "<<x<<")i + ("<<y<<")j + ("<<z<<")k"<<endl;
}
friend void operator-(vector &v);
};
void operator-(vector &v){
v.x=-v.x;
v.y=-v.y;
v.z=-v.z;
}
void main(){
vector v1(3,7,5);
clrscr();
v1.display();
// Unary Operator overloading
-v1;
v1.display();
getch();
}

C++ program to overload ++ increment operator for vectors using member function:-

#include<iostream.h>
#include<conio.h>
class vector{
float x,y,z;
public:
vector(){
x=y=z=0;
}
vector(float x1,float y1,float z1){
x=x1;
y=y1;
z=z1;
}
void display(){
cout<<"( "<<x<<")i+ ("<<y<<")j+("<<z<<")k"<<endl;
}
void operator++();
};
void vector::operator++(){
x=++x;
y=++y;
z=++z;
}
void main(){
vector v1(3,7,5);
clrscr();
v1.display();
++v1;
v1.display();
getch();
}

C++ program to overload ++ increment operator for vectors using friend function:-

#include<iostream.h>
#include<conio.h>
class vector{
float x,y,z;
public:
vector(){
x=y=z=0;
}
vector(float x1,float y1,float z1){
x=x1;
y=y1;
z=z1;
}
void display(){
cout<<"( "<<x<<")i+ ("<<y<<")j+("<<z<<")k"<<endl;
}
friend void operator++(vector &v);
};
void operator++(vector &v){
v.x=++v.x;
v.y=++v.y;
}
void main(){
vector v1(3,7);
clrscr();
v1.display();
++v1;
v1.display();
getch();
}

C++ program to overload binary + plus operator for vectors using member function:-

#include<iostream.h>
#include<conio.h>
class vector{
float x,y,z;
public:
vector(){
x=y=z=0;
}
vector(float x1,float y1,float z1){
x=x1;
y=y1;
z=z1;
}
void display(){
cout<<"( "<<x<<")i + ("<<y<<")j + ("<<z<<")k"<<endl;
}
vector operator+(vector &v);
};
vector vector::operator+(vector &v){
vector temp;
temp.x=x+v.x;
temp.y=y+v.y;
temp.z=z+v.z;
return temp;
}
void main(){
vector v1(3,7,5),v2(3,2,1),v3;
clrscr();
v1.display();
v2.display();
v3=v1+v2;
v3.display();
getch();
}

C++ program to overload binary + plus operator for vectors using friend function:-

#include<iostream.h>
#include<conio.h>
class vector{
float x,y,z;
public:
vector(){
x=y=z=0;
}
vector(float x1,float y1,float z1){
x=x1;
y=y1;
z=z1;
}
void display(){
cout<<"( "<<x<<")i + ("<<y<<")j + ("<<z<<")k"<<endl;
}
friend vector operator+(vector &v1,vector &v2);
};
vector operator+(vector &v1,vector &v2){
vector temp;
temp.x=v1.x+v2.x;
temp.y=v1.y+v2.y;
temp.z=v1.z+v2.z;
return temp;
}
void main(){
vector v1(3,7,5),v2(3,2,1),v3;
clrscr();
v1.display();
v2.display();
v3=v1+v2;
v3.display();
getch();
}


C++ program to overload Binary - minus operator using member function:-

#include<iostream.h>
#include<conio.h>
class complex{
float r,i;
public:
complex(){
r=0;
i=0;
}
complex(float real,float image){
r=real;
i=image;
}
void display(){
cout<<"complex Number is="<<r<<"+("<<i<<")i"<<endl;
}
complex operator-(complex c2);
};
complex complex::operator-(complex c2){
complex temp;
temp.r=r-c2.r;
temp.i=i-c2.i;
return temp;
}
void main(){
complex c1(3,4),c2(2,-5),c3;
clrscr();
c1.display();
c2.display();
getch();
c3=c1-c2;
c3.display();
getch();

}

C++ program to overload Binary - minus operator using friend function:-

#include<iostream.h>
#include<conio.h>
class complex{
float r,i;
public:
complex(){
r=0;
i=0;
}
complex(float real,float image){
r=real;
i=image;
}
void display(){
cout<<"complex Number is="<<r<<"+("<<i<<")i"<<endl;
}
complex operator-(complex c1,complex c2);
};
complex complex::operator-(complex c1,complex c2){
complex temp;
temp.r=c1.r-c2.r;
temp.i=c1.i-c2.i;
return temp;
}
void main(){
complex c1(3,4),c2(2,-5),c3;
clrscr();
c1.display();
c2.display();
getch();
c3=c1-c2;
c3.display();
getch();
}

No comments:

Post a Comment