C++ const Function

C++ const Function एक ऐसा Function होता है जो इस बात की Guarantee देता है कि ये Function उस Object के किसी Data Member के मान में किसी प्रकार का परिवर्तन नहीं करेगा जिसके साथ उसे Call किया गया है।

इस प्रकार का Function Define व Declare करते समय हमें केवल Function के Parenthesis के बाद const Keyword का प्रयोग करना पडता है। यानी यदि Constant Object को Output में Display करना है तो display() function को हमें निम्नानुसार Define व Declare करना होगा:

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

	   public:                   	 // Constructor
		  TTime() : hours(0), minutes(0)
		  {   }
					 // Copy Constructor
		  TTime(int h, int m) : hours(h), minutes(m)
		  {   }

		  void display(); const	 //const Function Declaration
		  void get();            // declare non-constant function
	};  // end class TTime

	void TTime::display() const   	//const Function Definition
	{
	   cout << hours << ':' << minutes;
	}

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

Class के केवल उस Member Function को const रखना होता है जो Object के Data को Change ना करे। इसीलिए इस उदाहरण में केवल display() Member Function को ही Constant रखा गया है। get() Function को हम कभी भी किसी const Object के साथ Use करना नहीं चाहते हैं, इसलिए इसे const नहीं रखा है, क्योंकि ये Member Function किसी Object के Data को Change करने के लिए ही Define किया गया है।

चूंकि ये एक Normal Member Function है इसलिए ये Member Function किसी const प्रकार के Object के साथ किसी प्रकार की प्रक्रिया नहीं कर सकता है। const Function की ये विशेषता होती है कि वे किसी भी प्रकार के Object को Access कर सकते हैं।

जबकि एक सामान्‍य प्रकार का Member Function const प्रकार के Object को Access नहीं कर सकता है। यदि एक सामान्‍य प्रकार का Member Function जैसे कि get() Function को किसी const Object के Reference में Use किया जाए, तो Compiler एक Error Message देता है। इस पूरी विवेचना को निम्न Class व Implemented Program द्वारा समझा जा सकता है:

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

	   public:                   	// Constructor
		  TTime() : hours(0), minutes(0)
		  {   }
					 // Copy Constructor
		  TTime(int h, int m) : hours(h), minutes(m)
		  {   }

		  void display() const;  // declare constant function
		  void get();            // declare non-constant function
	};  // end class TTime

	void TTime::display() const  	// output to screen
	{                    	// can be Called for const Objects
	   cout << hours << ':' << minutes;
	// hours = 2;          	// error: can't modify const Object
	}

	void TTime::get()          	// input from user
	{                         	// cannot be Called for const Objects
	   char dummy;               	// for colon
	   cout << "\nEnter time (format 12:59): ";
	   cin >> hours >> dummy >> minutes;
	}


	void main()
	{
	   const TTime noon(12, 0);  	// Create noon
	   cout << "\nnoon = ";
	   noon.display();           	// display noon
	// noon.get();               	// warning: attempt to change noon
	   TTime Time1;              	// Create Time1
	   Time1.get();              	// OK: Time1 is not a const Object
	   cout << "Time1 = ";
	   Time1.display();          	// display Time1
	}

इस Program में हमने एक TTime class बनाया है और इसमें Data Members के रूप में hours व minutes हैं। इस class में एक no-Argument Constructor है जो Data Members को Object Create करते ही 0 Initialize कर देता है।  यदि हम स्वयं का मान Object को Initialize करना चाहें तो इसके लिए एक Copy Constructor class में लिखा गया है।

void display() const; Statement द्वारा display Member Function को const प्रकार का Declare किया है।  ये Function const Object को Display करने के साथ ही किसी सामान्‍य Object को भी Display कर सकता है। जबकि void get(); Statement द्वारा हमने Object के Data प्राप्त करने के लिए सामान्‍य Member Function Declare किया है। ये Member Function केवल सामान्‍य Object के साथ ही प्रक्रिया कर सकता है।

चूंकि हम Object noon को Constant रखना चाहते हैं क्योंकि noon एक निश्चित समय पर ही होता है इसलिए get() Member Function को const Declare नहीं किया है। यदि इसे भी const कर देते तो noon का मान भी noon.get() Statement द्वारा बदला जा सकता है। जबकि हम ऐसा चाहते हैं कि noon का मान किसी भी प्रकार से ना बदल सके। हमने get() Member Function को const नहीं रखा है इसलिए यदि हम noon.get(); Statement Use करते हैं, तो Compilation के समय हमें एक Warning मिलती है कि हम किसी const Object का मान परिवर्तित करने जा रहे हैं। आप देख सकते हैं कि हमने const को display() के बाद लिखा है। यदि हम इसे निम्नानुसार लिखते हैं:

const void display();                                // not a const function

तो इसका मतलब होता है कि Function जो मान Return करेगा उस मान का Return Type const होगा, जबकि यहां Function का Return Type void है। यानी const का कोई मतलब नहीं है। const को किसी Function के बाद में लगाने पर ही Function Constant Object के साथ प्रक्रिया कर सकता है। इस Program का Output निम्नानुसार होता है:

noon = 12:00

Enter time (format 12:59): 1:30
Time1 = 1:30

इस Program में हम Constant Object noon का मान किसी भी प्रकार से नहीं बदल सकते हैं। लेकिन जैसाकि हम Program में देख सकते हैं कि Time1 Object के Data को get() Member Function द्वारा Change किया जा सकता है। यदि हम एक Non – Const Object के लिए एक const Member Function को Call करते हैं, तो Compiler हमें एक Warning Message देता है। लेकिन हम किसी Non – Const Member Function को किसी भी प्रकार के Object के Reference में Call कर सकते हैं।

एक const Function द्वारा हम किसी Object के किसी भी Data को Change नहीं कर सकते हैं। यदि हम ऐसा करने की कोशिश करते हैं, तो Compiler हमें ऐसा नहीं करने देता है। इसे Check करने के लिए Program में दि, गए Comments को Statement में Convert करके const Object व const Function के प्रभाव को देखा जा सकता है। यानी यदि हम display() Member Function के निम्न Statement को निम्नानुसार Comment से Normal Statement में Convert करें:

hours = 2;

और Program को Compile करें तो Compiler हमें निम्न Error Message प्रदान करता है:

Cannot modify a const object in function “TTime::display() const”

इस प्रकार से Constructors का प्रयोग करके हम किसी Real Life Object को उसी प्रकार से अपने Program में Use कर सकते हैं जिस प्रकार से किसी Basic प्रकार के Data Type के Variables को Use करते हैं। Constructors का Concept Class Creators के लिए काफी जरूरी Concept है। एक अच्छी तरह से Specify की जाने वाली Class में वे सभी विशेषताएं होनी चाहिए जो एक Class User को Class को अच्छी व सरल तरीके से Use करने में सहायता प्रदान करे।

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