Relational Operator Overloading

Relational Operator Overloading: जब हम Integer प्रकार के मानों की तुलना Relational Operators द्वारा करते हैं, तो उत्तर के रूप में True या False प्राप्त होता है। “C++” में False को 0 व किसी भी अन्‍य मान को True कहा जाता है। हम किसी भी साधारण int प्रकार के Variable को True या False मान को Store करने के लिए Use कर सकते हैं। लेकिन इस काम के लिए enum को Use करना ज्यादा अच्छा रहता है। यानी:

enum boolean {false=0, true};

 इसी Concept को Use करते हुए अब हम एक अन्‍य TTime Program देखते हैं जिसमें दो TTime Objects की आपस में तुलना की गई है। इसमें हम < Operator को Overload कर रहे हैं। इसे Overload करने के लिए हमें निम्नानुसार Declaration करना होता है:

bool operator < (const TTime& right)
{
	//Statements
}

 निम्न Program में हमने < Operator को Overload किया है। ये Operator जिस Object के Reference में Call किया जाता है, उस Object और Argument Object, दोनों के Time Values की तुलना करता है और यदि Object का मान Argument right की तुलना में छोटा होता है तो ये Operator Overloaded Member Function true Return करता है अन्‍यथा false return करता है। Program व Class निम्नानुसार है:

// Program
#include <iostream.h>
class TTime
{
   private:
	  int hours;                     	// 0 to 23
	  int minutes;                 	// 0 to 59

   public:
	  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
	  bool operator<(const TTime& right)
	  {
		 if(hours < right.hours)
			return true;
		 if(hours == right.hours && minutes < right.minutes)
			return true;
		 return false;
	  }
};  // end class TTime

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

   if(Time1 < Time2)
	  cout << "\nfirst less than second";
   else
	  cout << "\nfirst not less than second";
}

इस Program में < Operator को Overload किया गया है जो दो TTime Object के मानों की  

if(Time1 < Time2)

Statement द्वारा तुलना करता है। इस Program में bool नाम का एक Keyword Use किया गया है। ये ठीक उसी प्रकार काम करता है, जिस प्रकार से enum boolean {false=0, true}; Statement करता है। यानी यदि Condition सत्य होती है तो एक nonzero Return करता है जबकि यदि condition असत्य होती है तो zero Return करता है।

operator<() Function में हमने Object को By Reference भेजा है और Object का मान किसी भी प्रकार से Change ना हो, इस कारण से Object को const रखा है। फिर Time1 के Members की तुलना Time2 के Members से की है, ठीक उसी तरह से जिस तरह से Basic Data Type के Variables के साथ करते हैं।  यदि Time1 का मान Time2 के मान से छोटा है तो bool में True return होता है अन्‍यथा False Return होता है। इस true या false के आधार पर हम एक Message Display करते हैं जो बताता है कि कौनसा Object छोटा है और कौनसा बडा। इस Program का Output कुछ निम्नानुसार प्राप्त होता है:

Enter first TTime:
Enter time (format 12:59): 1:2
Enter second TTime:
Enter time (format 12:59): 23:59

first less than second

ये Member Function सबसे पहले स्वयं के hours से right यानी Argument Object के hours को Compare करता है। यदि स्वयं के hours का मान right के hours के मान से कम हो, तो Object जान जाता है कि right का मान Argument के मान से बढा है। अन्‍यथा ये minutes के मान को Check करता है।  यदि दोनों Objects के hours का मान बराबर हो तो minutes का मान Check किया जाता है। यदि स्वयं के minutes का मान Argument right के minutes के मान से कम हो तो Object को पता चल जाता है कि उसका मान Argument के मान से छोटा है।

इसी तरह से Function Situation के आधार पर कोई Boolean मान यानी true या false Return करता है। इस boolean मान का प्रयोग करके main() Function में Message Print किया जाता है, कि कौनसा Object छोटा है और कौनसा बडा। हमने right Argument को By Reference Function में Pass किया है ताकि Object की कोई Copy ना बने और अधिक Memory Use ना हो। साथ ही हमने Argument को const रखा है ताकि किसी कारण से भी Object का Actual मान Change ना हो।

हमने operator+() Function में Argument को By Value भेजा था।  लेकिन Efficiency के आधार पर हमें हमेंशा Operator की Overloading करते समय Argument को By Reference ही भेजना चाहिए। साथ ही Actual Argument का मान Change ना हो, इसके लिए Argument को const रखना चाहिए। किसी Operator की Overloading करते समय हमें किसी Constructor की जरूरत नहीं होती है, क्योंकि Operator Overloading वाला Function Constructor को Use नहीं करता है। (Relational Operator Overloading – WikiBooks)

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