Operator Overloading(ऑपरेटर ओवरलोडिंग) से आशय C++ के मौजूदा ऑपरेटर्स को अतिरिक्त अर्थ प्रदान करने की प्रक्रिया से है। निम्न उदाहरण देखिए
int a, b, c;
- - - -
c = a + b;
c = a + b; उपरोक्त उदाहरण में a + b एक valid स्टेटमेंट है, जिसका परिणाम c नाम के variable(वेरिएबल) में स्टोर हो जाएगा। यदि Expression निम्नानुसार हो तो..
Item i1, i2, i3;
- - -
i3 = i1 + i2;
जिसमें Item क्लास निम्नानुसार है.
class item
{
int a;
. . .
. . .
};
ऐसी स्थिति में i1 + i2 एक Invalid स्टेटमेंट होगा। इसका कारण है कि '+' Operator (ऑपरेटर) दो integer(इंटीज़र ) को तो जोड़ सकता है, किन्तु दो item को नहीं।
Operator Overloading(ऑपरेटर ओवरलोडिंग) में यह संभव है कि Operator(ऑपरेटर) को एक अतिरिक्त अर्थ (Item के संदर्भ में) प्रदान कर दिया जाए ताकि उपरोक्त स्टेटमेंट valid स्टेटमेंट बन सके।
इसके लिए Item क्लास में एक operator कीवर्ड को प्रयोग करते हुए एक Function बनाना होगा।
Operator Function का प्रारूप निम्नानुसार है
returnDatatype Operator <op> (arguments)
{
- - - -
}
उपरोक्त में <op> से आशय Basics Operator(बेसिक ऑपरेटर्स) जैसे +, -, << आदि से है।
Output:-
12 + i9
ध्यान दें कि कुछ Operator(ऑपरेटर्स) ऐसे हैं, जिन्हें Overload(ओवरलोड) नहीं किया जा सकता है। ऐसे ऑप्रेटर निम्नानुसार है.
Unary Operators Overloading in C++
हम जानते हैं कि Unary Operators(ऑपरेटर्स) को सिर्फ एक ही Operand (ऑपरेंड) की आवश्यकता होती है। उदाहरण के लिए ++ तथा unary ऑपरेटर हैं। ऐसे ऑपरेटर्स को किसी Class में Overload(ओवरलोड) करने के लिए उस - Class(क्लास) में operator <op> (...) फंक्शन बनाना होता है। इसका प्रारूप निम्नानुसार है:
class <classname>
{
........
void operator <op>()
{
......
}
};
Example:-
जब main () में Item के आधार पर ऑब्जेक्ट बनाया जाएगा और इस ऑब्जेक्ट पर ++ ऑपरेटर प्रयोग किया जाएगा तो स्वतः operator ++ () फंक्शन कॉल हो जाएगा और वेरिएबल a में इंक्रीमेंट कर देगा।
Example:-
निम्न उदाहरण में ऑपरेटर को ओवरलोड करते हुए प्रयोग किया गया है:
Output:-
Enter value for a : 45
Value of a is : 46
Explain Example:-
उपरोक्त उदाहरण में जब i1++; Statement रन होगी तो स्वतः operator++() फंक्शन कॉल हो जाएगा। चूंकि operator ++ () फंक्शन को i1 के माध्यम से कॉल करवाया जाएगा अतः यह फंक्शन i1 के Member a को प्रयोग कर सकता है। इसी कारण से यह फंक्शन i1 के a Member में increment(इंक्रीमेंट) कर पा रहा है। जिस प्रकार int variable में ++ से increment(इंक्रीमेंट) किया जाता है, उसी प्रकार उपरोक्त उदाहरण में किया गया है। किन्तु जिस प्रकार int expression में increment(इंक्रीमेंट) के साथ-साथ assignment भी किया जा सकता है, वैसे ही यदि उपरोक्त उदाहरण में किया जाए तो वह कार्य नहीं करेगा।
i2 = i1++ //invalid expression
इसका कारण है कि operator ++ () कुछ भी रिटर्न नहीं कर रहा है। उपरोक्त स्टेटमेंट कार्य करे इसके लिए हमें operator++() द्वारा int वैल्यू रिटर्न करवानी होगी।
Example:-
निम्न उदाहरण में operator++ () Function(फंक्शन) Integer(इंटीजर) Value(वैल्यू) रिटर्न कर रहा है.
Output:-
Enter value for a : 125
Value of i is : 126
Value of a is : 126
Explain Example:-
उपरोक्त उदाहरण में जब i = 0b1++; statement रन होगी तो operator++() फंक्शन a में इंक्रीमेंट करते हुए a को रिटर्न कर रहा है। यह रिटर्न करवायी जा रही वैल्यू वेरिएबल में स्टोर करवाई जा रही है।
Prefix और Postfix में अंतर
C++ में Increment(इंक्रीमेंट) तथा Decrement(डिक्रीमेंट) ऑपरेटर को Overlord(ओवरलोड) करते समय prefix के लिए अलग तथा postfix के लिए अलग-अलग बनाया जा सकता है। इसमें जहां pre increment के लिए फंक्शन को कोई भी Argument(आरग्यूमेंट) पास नहीं कराया जाता हैं, वहीं post increment के लिए आरग्यूमेंट की जगह पर सिर्फ int कीवर्ड लिख दिया जाता है।
int operator++ () // Pre Increment Version
int operator++ (int ) // Post Increment Version
Example:-
निम्न उदाहरण में prefix तथा postfix increment ऑपरेटर को अलग-अलग प्रकार से overload(ओवरलोड) किया गया है:
Output:-
Post Increment Version 501
Pre Increment Version 503
Explain Example:-
उपरोक्त उदाहरण में जब i1++ रन होगा तो चूंकि यह post increment है अतः (operator ++ (int) फंक्शन रन हो जाएगा। दूसरी ओर जब ++i1 रन होगा तो pre increment होने के कारण operator ++ () फंक्शन रन हो जाएगा।
0 Comments