What is Operator Overloading
User Define Data-type (class) पर Operator (+, -, ++, — ,> etc) उपयोग नहीं किये जा सकते। प्रत्येक operator basic data type (int, float, char) पर ही कार्य कर सकता है, यदि हम Operator के मूल प्रकृति (Basic Nature) को बदले बगैर उसे user define data-type पर भी प्रयोग करें तब इस Process को Operator Overloading कहा जाता हैं।
उदाहरण के लिए जैसे + का प्रयोग हम किन्ही दो संख्याओं को जोड़ने के लिए करते हैं पर हम चाहें तो Operator Overloading की सहायता से हम किसी एक class के किन्ही दो ऑब्जेक्ट्स को जोड़ने के लिए भी कर सकते हैं|
Operator Overload, Polymorphism (बहुरूपता) का एक उदाहरण हैं। इसे हम Compile time polymorphism भी कहते हैं। Operator Overloading की सहायता से विभिन्न Arithmetic एवं relational Operator को user define data-type पर परिभाषित किया जा सकता हैं। और इन्हें प्रयोग किया जा सकता हैं। इसके लिए हमें Operator member function बनाना पड़ता है। यह Special member function से भिन्न होता हैं। इसका Syntax निम्नलिखित हैं –
Syntax
Return_type operator_op (Argument_list);
Example :-
void Operator – ( );
int Operator > (int a) ;
int Operator < (int x) ;
time Operator + (time t);
Operator Operand के आधार पर Overloading दो प्रकार की होती है
- Unary Operator Overloading – ऐसे Operator जो दो Operand पर कार्य करते हैं। Binary Operator कहलाते हैं। जैसे +, -, % इत्यादी
- Binary Operator Overloading – ऐसे Operator जो एक ही operand पर कार्य करते हैं, को Unary Operator कहते हैं। जैसे ++, –, – इत्यादी
Rules For Overloading Operators
Operators को Overload करने के कुछ नियम हैं जो निम्न हैं –
- पहले से मौजूद Operators को ही Overload किया जा सकता हैं, नये Operator का निर्माण नहीं किया जा सकता हैं।
- प्रत्येक Overload किये गये Operator के साथ user द्वारा व्यक्त कम से कम एक Operand होना आवश्यक हैं।
- Overload Operator का मूल प्रकृति (Basic Nature) नहीं बदला जा सकता हैं अर्थात् + को घटाने में प्रयोग नही कर सकते हैं।
- Overload Operator basic operator के नियमों का पालन करता हैं।
- Unary Operator जो कि Overload किये जाते हैं तो कोई Argument नहीं लेते हैं यदि इन्हें Friend function से Overload कराते हैं तो यह Argument लेते हैं।
- Binary Operator जिन्हें Overload किया जाता हैं। एक Argument लेते हैं, यदि इन्हें Friend Function के द्वारा Overload किया जाता हैं तब यह दो Argument लेते हैं।
- जब Binary Operator को Member Function के द्वारा Overload किया जाये तो यह आवश्यक होता हैं कि बायीं तरफ वाला Operator संगत Class का Object हो।
- सभी Binary Arithmetic Operator (+, -, *, /) Return Value देते हैं।
- मित्र (Friend) function के द्वारा कुछ Operator को Overload नहीं कर सकते, वे Operator निम्न हैं –
- = Assignment Operator
- ( ) Function Call Operator
- [ ] Subscripting Operator
- → Class Member Access Operator
- कुछ Operator ऐसे होते हैं जिन्हें Overload नहीं किया जा सकता हैं।
Example of Unary Operator Overloading
++ increment Operator Overloading
#include <iostream.h> #include <conio.h> Class counter { int count; public: counter() { Counter = 0; } show_count() { return count; } void Operator++ () { count++; } }; int main() { clrscr(); counter c1, c2; cout << “/n c=” << c1.show_count ( ); cout << “\n c2=” << c2.show_count ( ); c1++; c2++; cout<<”\n c1 =” << c1. show_count(); cout<<”\n c2 =” << c2. show_count(); }
Binary Operator Overload using Friend Function
जब हम किसी Binary Operator को Friend Function से Overload कराते हैं तो Operator Function में दो Argument दिये जाते हैं।
#include<iostream.h> #include<conio.h> class complex { int a, b; public: void getvalue() { cout << "Enter the value of Complex Numbers a,b:"; cin >> a>>b; } complex operator+(complex ob) { complex t; t.a = a + ob.a; t.b = b + ob.b; return (t); } complex operator-(complex ob) { complex t; t.a = a - ob.a; t.b = b - ob.b; return (t); } void display() { cout << a << "+" << b << "i" << "\n"; } }; void main() { clrscr(); complex obj1, obj2, result, result1; obj1.getvalue(); obj2.getvalue(); result = obj1 + obj2; result1 = obj1 - obj2; cout << "Input Values:\n"; obj1.display(); obj2.display(); cout << "Result:"; result.display(); result1.display(); getch(); }