this and const

this and const: this एक ऐसा Magic Pointer होता है जो उसी Object का Pointer Point करता है, जिसके Reference में किसी Member Function को Call किया गया होता है। यानी किसी Object का कोई भी Member Function ये जान सकता है कि उसे किस Object के Reference में Invoke किया गया है। इसे समझने के लिए निम्न Program देखते हैं:

// The this Pointer
#include <iostream.h>
#include <conio.h>

class where
{
	private:
		char charray[10];   	// occupies 10 bytes
	public:
		void reveal()
		{ 
			cout << “\nMy object's address is ” << this; 
		}
};

void main()
{
	where w1, w2, w3;   	// make three objects
	w1.reveal();        	// see where they are
	w2.reveal();
	w3.reveal();
	getch();
}

main() Function में तीन where class के Object Create होते हैं। फिर reveal() Member Function इन तीनों Objects का Address Output में Print करता है। ये Function this Pointer का प्रयोग करके हर Object के Address को Print करता है। इसका Output हमें निम्नानुसार प्राप्त होता है:

My object’s address is 0x0012ff80
My object’s address is 0x0012ff74
My object’s address is 0x0012ff68

this Pointer का प्रयोग हम Static Member Functions में नहीं कर सकते हैं क्योंकि this Pointer Particular किसी एक Object से Associated नहीं होता है बल्कि उस Class के सभी Objects से सम्बंधित होता है। यानी Class के सभी Objects के लिए ये Pointer समान रूप से काम करता है। this Pointer का प्रयोग किसी Object के Pointer यानी “Pointer to an Object” की तरह भी किया जा सकता है। इस वजह से this Pointer का प्रयोग Object के उन Data Members को Access करने के लिए भी किया जा सकता है जिन्हें this Pointer Point करता है। इस तथ्य के आधार पर निम्न Program Develop किया गया है:

// the this pointer referring to data
#include <iostream.h>
#include <conio.h>

class what
{
	private:
		int alpha;

	public:
		void tester()
		{
			this->alpha = 111;    	// same as alpha = 111;
			cout << this->alpha;  	// same as cout << alpha;
		}
};

void main()
{
	what w;
	w.tester();
	getch();
}

ये Program केवल मान 111 को Output में Print करता है। इस Class का Member Function tester() Class के Data Member alpha को निम्न Expression का प्रयोग करते हुए Access करता है:

this->alpha;

ये Statement भी उसी प्रकार से काम करता है जैसे हम alpha को Directly Access कर रहे हों। ये Syntax काम करता है लेकिन this Pointer को इस प्रकार से Use करने की कोई जरूरत नहीं होती है क्योंकि मुख्‍य रूप से ये उस Object का Pointer होता है जिसके Reference में इसे Involve करने वाला Member Function Invoke होता है।

एक बात हमेंशा ध्‍यान रखें कि this को केवल किसी Member Function के अन्दर ही Use किया जा सकता है। हम इसे main() Function या UDF में Use नहीं कर सकते हैं।

हम this->alpha = 111 statement के स्थान पर केवल alpha = 111 भी कर सकते हैं। यहां this में alpha का ही Address Stored है।

हम this Magic Pointer का प्रयोग किसी Member Function या किसी Overloaded Operator से Value Return करने के लिए भी कर सकते हैं।

जैसाकि हमने पहले भी कहा था कि Return Value के रूप में Reference Return करना चाहिए, क्योंकि Reference Return करने से फालतू Object Create नहीं होता है।  लेकिन हम ये भी जानते हैं कि हम किसी Automatic Object यानी Function में Create किए गए किसी Local Object या Variable को By Reference Return नहीं कर सकते हैं, क्योंकि इस प्रकार के Objects या Variables Function के Terminate होते ही Destroy हो जाते हैं, जिससे Reference ऐसे मान को Point करता है जो कि Function के Terminate होने के बाद उपलब्ध नहीं रहता है।

किसी Function में Create किए गए Local Object की तुलना में वह Object अधिक समय तक उपयोगी व Memory में उपलब्ध रहता है, जिसके Reference में किसी Member Function को Call किया जाता है। यानी एक Object उसके Member Functions की तुलना में अधिक समय के लिए Permanent होता है।  Member Function को जब Call किया जाता है, वे Create होते हैं और Member Function के Terminate होने पर Member Functions Destroy हो जाते हैं, लेकिन Object तब तक Destroy नहीं होते हैं, तब तक कि इन्हें किसी तरीके से Destroy ना कर दिया जाए। इसलिए किसी Member Function में Create किए गए Temporary Object को Return करने की तुलना में उस Object को Return करना ज्यादा सुनिश्चित व सही होता है, जिसके Reference में किसी Member Function को Call किया जाता है और ये काम this Magic Pointer आसानी से कर सकता है।

निम्न उदाहरण में operator=() Function उस Object को By Reference Return कर रहा है, जिसके Reference में इस operator=() Member Function को Call या Invoke किया गया है।

// returns contents of the this pointer
#include <iostream.h>
#include <conio.h>

class alpha
{
	private:
		int data;

	public:
		alpha()                    	// no-arg constructor
		{ }

		alpha(int d)                	// one-arg constructor
		{ data = d; }

		void display()               	// display data
		{ cout << data; }

		alpha& operator = (alpha& a) 	// overloaded = operator
		{
			data = a.data;          // (not done automatically)
			cout << “\nAssignment operator invoked";
			return *this;           // return ref to this alpha
		}
};

void main()
{
	alpha a1(372);
	alpha a2, a3;

	a3 = a2 = a1;                 	// invoke overloaded =

	cout << “\na2="; a2.display();  // display a2

	cout << “\na3="; a3.display();  // display a3
	getch();
}

इस Program में हमने Overloaded = Operator को निम्नानुसार Declare किया है:

alpha& operator = (alpha& a)

जो कि By Reference Return होता है। इस Member Function का अंतिम Statement

return *this;

है, क्योंकि this उस Object का Pointer है, जो कि Overload Operator के Function को Invoke करता है। alpha स्वयं Object है और ये Statement इस Object के Address यानी इस Object को ही Return कर रहा है। इस Program का Output निम्नानुसार आता है:

Assignment operator invoked
Assignment operator invoked
a2=372
a3=372

जितनी बार भी = Sign Compiler को निम्न मिलता है,

a3 = a2 = a1;

ये Overloaded operator=() Function call होता है, जो कि “Assignment operator invoked” Massage Display करता है। Member Functions व Overloaded Operator से Returning by Reference एक ऐसा Powerful तरीका है, जिसे Commonly Use किया जाता है। इससे Unnecessary Objects का Creation नहीं होता है। ये तरीका हमारे Program को छोटा, Fast व अधिक Error Free बनाता है। (this and const – StackOverflow)

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