Assignment Operator Overloading

Assignment Operator Overloading: हम Assignment Operators को भी अपनी आवश्‍यकतानुसार Overload कर सकते हैं। साधारण Binary Operators को Overload करने की तुलना में Assignment Operators जैसे कि +=, -+, *=, /=, %= को Overload करना काफी कठिन होता है। Binary Operators की Overloading व इन Assignment Operators की Overloading में सबसे बडा अन्तर यही है कि Assignment Operators उसी Object के Data को Modify करते हैं, जिनके Reference में इन्हें Call किया जाता है। जैसे यदि हम निम्न Statement देखें:

Time1 += Time2;

 तो इस Statement में operator+=() Function Object Time1 के Reference में Call किया जाता है और ये Function Time1 के Object के Time में Time2 Object के Time को जोडता है और प्राप्त होने वाले Resultant मान को वापस से Time1 Object में Overwrite कर देता है। जबकि सामान्‍य Binary Operators को जोडने वाला operator+() Function Object को ये Message देता है कि वह स्वयं के मान में Argument वाले Object के मान को जोडे और Result को Return करे।  हालांकि Assignment Operators का मुख्‍य उद्देश्‍य यही होता है कि वह जिस Object के Reference में Call किया गया है, उस Object के मान को Argument के मान में जोडे और Result को स्वयं में ही Store करे। लेकिन इस Function में ये सुविधा भी होनी चाहिए कि वह निम्न Statement की Requirement को भी पूरा करे%

Time3 = Time1 += Time2;

 जहां += Operation द्वारा Object Time1 को भी Addition का Result प्राप्त हो और Time3 Object को भी Time1 व Time2 के मानों के Addition का Result प्राप्त हो। Assignment Operators सामान्‍यतया स्वयं की Class का मान Return करता है। हालांकि इस Return Value का हमेंशा उपयोग नहीं होता है। निम्न Program में हमने Assignment Operator को Overload किया है। इसे देखें व इसकी कार्यप्रणाली को समझने की कोशिश करें:

// Program
#include <iostream.h>
#include <conio.h>

class TTime
{
   private:
	  int hours;                    // 0 to 23
	  int minutes;                  // 0 to 59

   public:
	  // no-arg Constructor
	  TTime() : hours(0), minutes(0)
	  {  }
	  // 2-arg Constructor
	  TTime(int h, int m) : hours(h), minutes(m)
	  {  }

	  void display() const   	// output to screen
	  {
		 cout << hours << ':' << minutes;
	  }

	  void get()                   	// input from user
	  {
		 char dummy;
		 cout << "\nEnter time (format 12:59): ";
		 cin >> hours >> dummy >> minutes;
	  }

	  // overloaded += operator
	  TTime operator += (const TTime& right)
	  {
		 hours += right.hours;  // add Argument to us
		 minutes += right.minutes;
		 if(minutes >= 60)     	// check for carry
		 { 
		hours++; 
		minutes -= 60; 
	  }
		 return TTime(hours, minutes); 	// return our new value
	}
};  // end class TTime

void main()
{
   TTime Time1, Time2, Time3;
   cout << "Enter first TTime: ";
   Time1.get();
   cout << "Enter second TTime: ";
   Time2.get();

   Time1 += Time2;              // overloaded += operator
   // adds Time2 to Time1
   cout << "\nTime1+=Time2 = ";
   Time1.display();             // display result

   Time3 = Time1 += Time2; 	// do it again, use return value
   cout << "\nTime3 = ";
   Time3.display();             // display result
   getch();
}

Program को देखने से ही इसकी सारी प्रक्रिया समझ में आ रही है। इसी आधार पर हम विभिन्न प्रकार के अन्‍य Assignment Operators को Overload कर सकते हैं। इस Program में हमने Overloaded Operator को दो तरह से Use किया है।  पहले तरीके में Time1 में Time2 का मान जुड कर वापस Time1 में Store हो जाता है, जबकि दूसरे तरीके में हमने Overloaded Operator के Return मान को Time3 में Store किया है। ध्‍यान दें कि Program किस प्रकार से += Operator के Addition के मानों को Return करता है:

return TTime(hours, minutes);

ये एक खास प्रकार का Statement है। ये एक Constructor कि तरह दिखाई देता है और आप सोंच सकते हैं कि ये Statement एक नए TTime Object को Create करेगा। लेकिन Compiler ये जानता है कि यहां केवल मान को Return करना है। ये Function में किसी भी प्रकार का Temporary Object Create नहीं करता है। किसी Overloading Function में कोई Temporary Object Create ना हो, हमें यही कोशिश करनी चाहिए। ऐसा करने से समय व Memory की बचत होती है। लेकिन हमने operator+=() Function में ऐसा इसलिए नहीं किया है, क्योंकि इस Function में हमें Intermediate Calculation के मानों को Store करने की जरूरत पड रही है। हालांकि हम इसी काम को करने के लिए निम्नानुसार int Variables भी Create कर सकते हैं:

TTime operator + (const TTime& right)  {
   int thrs = hours + right.hours; 	// add Data
   int tmins = minutes + right.minutes;
   if(tmins >= 60) { 			// check for carry
	thrs++; 
	tmins -= 60;
   }
 
   return TTime(thrs, tmins);       	// return unnamed
   }                                  	// temporary Object

चूंकि यदि किसी Object के स्थान पर Basic प्रकार के Variables से Required काम हो जाता है, तो हमें Basic Data Type के Variables ही Create करने चाहिएं। क्योंकि Objects के Create व Destroy होने में Basic प्रकार के Data Types के Variables की तुलना में अधिक समय व Memory का प्रयोग होता है।

CPP Programming Language in Hindiये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook C++ Programming Language in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी। 

C++ Programming Language in Hindi | Page: 666 | Format: PDF

BUY NOW GET DEMO REVIEWS