इस ट्यूटोरियल में, हम उदाहरणों की मदद से ऑपरेटर ओवरलोडिंग के बारे में जानेंगे।
C ++ में, हम उपयोगकर्ता-परिभाषित प्रकारों जैसे ऑब्जेक्ट और संरचनाओं के लिए ऑपरेटर के काम करने के तरीके को बदल सकते हैं। इसे ऑपरेटर ओवरलोडिंग के रूप में जाना जाता है । उदाहरण के लिए,
मान लें कि हमने तीन ऑब्जेक्ट्स c1, c2 बनाए हैं और एक वर्ग से परिणाम है जिसका नाम Complex
जटिल संख्याओं का प्रतिनिधित्व करता है।
चूंकि ऑपरेटर ओवरलोडिंग से हमें बदलने की अनुमति मिलती है कि ऑपरेटर कैसे काम करते हैं, हम +
निम्न कोड को लिखकर c1 और c2 की जटिल संख्याओं को जोड़ने के लिए ऑपरेटर कैसे काम करता है और इसका उपयोग कैसे कर सकता है :
result = c1 + c2;
बजाय कुछ की तरह
result = c1.addNumbers(c2);
यह हमारे कोड को सहज और समझने में आसान बनाता है।
नोट: हम जैसे मौलिक डेटा प्रकार के लिए अधिक भार ऑपरेटर का उपयोग नहीं कर सकते हैं int
, float
, char
और इतने पर।
C ++ ऑपरेटर ओवरलोडिंग के लिए सिंटैक्स
एक ऑपरेटर को अधिभारित करने के लिए, हम एक विशेष operator
फ़ंक्शन का उपयोग करते हैं।
class className (… public returnType operator symbol (arguments) (… )… );
यहाँ,
returnType
फ़ंक्शन का रिटर्न प्रकार है।- ऑपरेटर एक कीवर्ड है।
symbol
हम जिस ऑपरेटर को ओवरलोड करना चाहते हैं। जैसा:+
,<
,-
,++
, आदिarguments
फ़ंक्शन के लिए दिए गए तर्क हैं।
यूनियरी ऑपरेटर्स में ऑपरेटर ओवरलोडिंग
केवल एक ऑपरेंड पर ही यूनिरी ऑपरेटर्स काम करते हैं। वेतन वृद्धि ऑपरेटर ++
और वेतन वृद्धि ऑपरेटर अपरिपक्व ऑपरेटरों के --
उदाहरण हैं।
उदाहरण 1: ++ ऑपरेटर (Unary Operator) ओवरलोडिंग
// Overload ++ when used as prefix #include using namespace std; class Count ( private: int value; public: // Constructor to initialize count to 5 Count() : value(5) () // Overload ++ when used as prefix void operator ++ () ( ++value; ) void display() ( cout << "Count: " << value << endl; ) ); int main() ( Count count1; // Call the "void operator ++ ()" function ++count1; count1.display(); return 0; )
आउटपुट
गणना: 6
यहाँ, जब हम उपयोग करते हैं ++count1;
, void operator ++ ()
कहा जाता है। यह 1 से ऑब्जेक्ट count1 के लिए मान विशेषता बढ़ाता है।
नोट: जब हम ऑपरेटरों को ओवरलोड करते हैं, तो हम किसी भी तरह से काम करने के लिए इसका उपयोग कर सकते हैं। उदाहरण के लिए, हम ++
मूल्य में 100 की वृद्धि कर सकते थे ।
हालाँकि, यह हमारे कोड को भ्रामक और समझने में कठिन बनाता है। ठीक से और सुसंगत और सहज तरीके से ऑपरेटर को लोड करने के लिए प्रोग्रामर के रूप में यह हमारा काम है।
उपर्युक्त उदाहरण केवल तभी काम करता है जब ++
उपसर्ग के रूप में उपयोग किया जाता है। ++
पोस्टफिक्स के रूप में काम करने के लिए हम इस सिंटैक्स का उपयोग करते हैं।
void operator ++ (int) ( // code )
int
कोष्ठकों के अंदर की ओर ध्यान दें । यह उपसर्ग के रूप में एकरी संचालकों का उपयोग करने के लिए प्रयुक्त वाक्यविन्यास है; यह एक फ़ंक्शन पैरामीटर नहीं है।
उदाहरण 2: ++ संचालक (Unary Operator) ओवरलोडिंग
// Overload ++ when used as prefix and postfix #include using namespace std; class Count ( private: int value; public: // Constructor to initialize count to 5 Count() : value(5) () // Overload ++ when used as prefix void operator ++ () ( ++value; ) // Overload ++ when used as postfix void operator ++ (int) ( ++value; ) void display() ( cout << "Count: " << value << endl; ) ); int main() ( Count count1; // Call the "void operator ++ (int)" function count1++; count1.display(); // Call the "void operator ++ ()" function ++ count1; count1.display(); return 0; )
आउटपुट
गणना: 6 गणना: 7
उदाहरण 2 जब काम करता है ++
दोनों उपसर्ग और पोस्टफ़िक्स के रूप में प्रयोग किया जाता है। हालाँकि, यह काम नहीं करता अगर हम ऐसा कुछ करने की कोशिश करते हैं:
Count count1, result; // Error result = ++count1;
ऐसा इसलिए है क्योंकि हमारे ऑपरेटर फ़ंक्शन का रिटर्न प्रकार है void
। हम इस समस्या Count
को ऑपरेटर प्रकार के रिटर्न प्रकार के रूप में हल कर सकते हैं ।
// return Count when ++ used as prefix Count operator ++ () ( // code ) // return Count when ++ used as postfix Count operator ++ (int) ( // code )
उदाहरण 3: ऑपरेटर फ़ंक्शन से वापसी मान (++ ऑपरेटर)
#include using namespace std; class Count ( private: int value; public : // Constructor to initialize count to 5 Count() : value(5) () // Overload ++ when used as prefix Count operator ++ () ( Count temp; // Here, value is the value attribute of the calling object temp.value = ++value; return temp; ) // Overload ++ when used as postfix Count operator ++ (int) ( Count temp; // Here, value is the value attribute of the calling object temp.value = ++value; return temp; ) void display() ( cout << "Count: " << value << endl; ) ); int main() ( Count count1, result; // Call the "Count operator ++ ()" function result = ++count1; result.display(); // Call the "Count operator ++ (int)" function result = count1++; result.display(); return 0; )
आउटपुट
गणना: 6 गणना: 7
यहाँ, हमने उपसर्ग ऑपरेटर ओवरलोडिंग के लिए निम्न कोड का उपयोग किया है:
// Overload ++ when used as prefix Count operator ++ () ( Count temp; // Here, value is the value attribute of the calling object temp.value = ++value; return temp; )
पोस्टफ़िक्स ऑपरेटर ओवरलोडिंग के लिए कोड समान है। ध्यान दें कि हमने एक ऑब्जेक्ट अस्थायी बनाया है और ऑपरेटर फ़ंक्शन को उसका मान लौटाया है।
कोड पर भी ध्यान दें
temp.value = ++value;
वैरिएबल मान count1 ऑब्जेक्ट के अंतर्गत आता है main()
क्योंकि count1 फ़ंक्शन को कॉल कर रहा है, जबकि temp.value अस्थायी ऑब्जेक्ट से संबंधित है।
बाइनरी ऑपरेटर्स में ऑपरेटर ओवरलोडिंग
बाइनरी ऑपरेटर दो ऑपरेंड पर काम करते हैं। उदाहरण के लिए,
result = num + 9;
यहाँ, +
एक बाइनरी ऑपरेटर है जो ऑपरेंड्स संख्या पर काम करता है और 9
।
जब हम कोड का उपयोग करके उपयोगकर्ता-परिभाषित प्रकारों के लिए बाइनरी ऑपरेटर को अधिभारित करते हैं:
obj3 = obj1 + obj2;
ऑपरेटर फ़ंक्शन को obj1 ऑब्जेक्ट का उपयोग करके कहा जाता है और obj2 फ़ंक्शन के तर्क के रूप में पारित किया जाता है।
उदाहरण 4: C ++ बाइनरी ऑपरेटर ओवरलोडिंग
// C++ program to overload the binary operator + // This program adds two complex numbers #include using namespace std; class Complex ( private: float real; float imag; public: // Constructor to initialize real and imag to 0 Complex() : real(0), imag(0) () void input() ( cout <> real; cin>> imag; ) // Overload the + operator Complex operator + (const Complex& obj) ( Complex temp; temp.real = real + obj.real; temp.imag = imag + obj.imag; return temp; ) void output() ( if (imag < 0) cout << "Output Complex number: " << real << imag << "i"; else cout << "Output Complex number: " << real << "+" << imag << "i"; ) ); int main() ( Complex complex1, complex2, result; cout << "Enter first complex number:"; complex1.input(); cout << "Enter second complex number:"; complex2.input(); // complex1 calls the operator function // complex2 is passed as an argument to the function result = complex1 + complex2; result.output(); return 0; )
आउटपुट
पहला जटिल नंबर दर्ज करें: क्रमशः वास्तविक और काल्पनिक भागों को दर्ज करें: ९ ५ दूसरी जटिल संख्या दर्ज करें: क्रमशः वास्तविक और काल्पनिक भागों को दर्ज करें:: ६ आउटपुट कॉम्प्लेक्स संख्या: १६ + ११ आई
इस कार्यक्रम में, ऑपरेटर फ़ंक्शन है:
Complex operator + (const Complex& obj) ( // code )
इसके बजाय, हम यह फ़ंक्शन भी लिख सकते हैं जैसे:
Complex operator + (Complex obj) ( // code )
हालाँकि,
&
ऑपरेटर फ़ंक्शन के अंदर डुप्लिकेट ऑब्जेक्ट बनाने के बजाय कॉम्प्लेक्स 2 ऑब्जेक्ट को संदर्भित करके हमारे कोड को कुशल बनाता है।- का उपयोग
const
करना एक अच्छा अभ्यास माना जाता है क्योंकि यह ऑपरेटर फ़ंक्शन को कॉम्प्लेक्स 2 को संशोधित करने से रोकता है।

सी ++ ऑपरेटर ओवरलोडिंग में याद रखने योग्य बातें
- दो ऑपरेटर
=
और&
पहले से ही C ++ में डिफ़ॉल्ट रूप से ओवरलोडेड हैं। उदाहरण के लिए, एक ही वर्ग की वस्तुओं को कॉपी करने के लिए, हम सीधे=
ऑपरेटर का उपयोग कर सकते हैं । हमें ऑपरेटर फ़ंक्शन बनाने की आवश्यकता नहीं है। - ऑपरेटर ओवरलोडिंग ऑपरेटरों की पूर्वता और सहूलियत को नहीं बदल सकता है। हालांकि, अगर हम मूल्यांकन के क्रम को बदलना चाहते हैं, तो कोष्ठक का उपयोग किया जाना चाहिए।
- ऐसे 4 ऑपरेटर हैं जिन्हें C ++ में अधिभार नहीं दिया जा सकता है। वे:
::
(गुंजाइश संकल्प).
(सदस्य चयन).*
(कार्य करने के लिए सूचक के माध्यम से सदस्य चयन)?:
(टर्नरी ऑपरेटर)
अधिक जानने के लिए इन पृष्ठों पर जाएँ:
- सही तरीके से इंक्रीमेंट ऑपरेटर को ओवरलोड कैसे करें?
- बाइनरी ऑपरेटर को ओवरलोड कैसे करें - जटिल संख्याओं को घटाना?