Polymorphism in C++

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 DOWNLOAD READ ONLINE

Polymorphism in C++: Object Oriented Programming के तीन मुख्‍य Concepts हैं। पहला Concept है Class और दूसरा Concept है Inheritance, जिन्हें हमने पहले ही समझ लिया है। OOPS का तीसरा सबसे महत्वपूर्ण Concept है Polymorphism, जिसे C++ में Virtual Functions द्वारा Implement किया जाता है।

वास्तविक जीवन में भी हम देखते हैं कि विभिन्न प्रकार की चीजों का कोई समूह किसी एक Instruction के प्रभाव में विभिन्न प्रकार के Reactions करता है। किसी एक Instruction का विभिन्न लोगों पर विभिन्न प्रभाव होता है और सभी लोग उस एक Instruction को अपनी सुविधा के अनुसार समझ कर उसके प्रति अपना Reaction देते हैं। यही प्रक्रिया C++ में Polymorphism कहलाती है। इसे एक उदाहरण द्वारा समझने की कोशिश करते हैं।

हम सभी जानते हैं कि किसी University में विभिन्न प्रकार के Students अपनी इच्छानुसार विभिन्न प्रकार के Subjects को Choose करते हैं और उसी Subject की पढाई करने के लिए University के किसी विशेष Department में Admission लेते हैं। जिसे Engineer बनना है वह Engineering के Subject के Department में Admission लेता है, जिसे Computer Science के Field में अपना Career बनाना है, वह Computer Science के Department में Admission लेता है और जिसे Doctor बनना है, वह Doctors के Department में Admission लेता है।

हर University में विभिन्न प्रकार के Students Admission लेने के लिए अपने-अपने Registration Form कब Submit कर सकते हैं, इसका निर्ण; University का मुख्‍य कार्यकर्ता जिसे Dean कहते हैं, लेता है। वही ये तय करता है कि University में Admission कब Open होंगे।

मानलो कि आप किसी University के Dean हैं और आप सभी Students को ये Information देना चाहते हो कि University में Admission Open हो चुके हैं। जिन Students को आपकी University में Admission लेना है, वे अपना Registration Form Fill करके University में Submit कर सकते हैं। यानी आप Students को Message देते हैं कि

“Fill out your registration form!”

आपके इस Message का विभिन्न Subjects के साथ University में Admission लेने वाले विभिन्न Students पर अलग असर होता है। जो Student Science Biology Subject में Admission लेना चाहता है, वह Science Biology के Admission Form को Fill करता है। जो Engineer बनना चाहता है, वह Engineering का Registration Form Fill करता है और जो Computer Science में Admission लेना चाहता है, वह Computer Science का Registration Form Fill करता है। आप हर Group के Student को अलग-अलग Message नहीं देते हैं कि Doctor बनने वाले Students Doctor का Registration Form Fill करें, Engineer बनने वाले Students Engineering का Registration Form Fill करें और MSA या M. Tech. करने वाले Students Computer Science का Registration Form Fill करे।

यानी Dean के एक Message को विभिन्न Student विभिन्न प्रकार से Respond करते हैं और सभी को पता होता है कि Dean के दि, गए Message का उनके लिए क्या अर्थ है और उन्हें किस Registration Form को Fill करके Submit करना है।

एक Action के Response में कई प्रकार की Reaction होना या एक ही बात का अलग-अलग स्थितियों में अलग-अलग रूप लेना ही, Polymorphism कहलाता है। Dean द्वारा दिया जाने वाला एक Single Instruction Polymorphic Message है क्योंकि विभिन्न Students के लिए ये एक अलग Instruction है। यानी Dean के इस एक ही Message में Computer Science वाले Student के लिए Computer Science Registration Form को Fill करने का Instruction है और Engineering Student के लिए Engineering Registration Form Fill करने का Instruction है।

C++ में Polymorphism की स्थिति तब उत्पन्न होती है जब विभिन्न Classes आपस में Inheritance द्वारा Relate की जाती हैं। C++ में Polymorphism का मतलब होता है कि कोई Object जिस Member Function को Invoke करता है, उसी नाम का Member Function विभिन्न Classes में होता है, लेकिन वही Member Function Invoke होता है, जिसकी Class (Type) का Object Define किया गया होता है।

यानी Object समान Member Functions को ही Call करता है लेकिन Object की प्रकृति के आधार पर अलग-अलग Member Functions Execute होते हैं और समान नाम के Member Functions Object की Class के आधार पर अलग-अलग प्रकार का काम करते हैं।

Polymorphism Overloading नहीं है, बल्कि Overloading से कहीं ज्यादा Powerful व Different Mechanism है। Overloading व Polymorphism में मुख्‍य अन्तर ये है कि Overloading होने पर Compiler Compile Time में ये तय करता है कि किस Function को Execute करना है। जबकि Polymorphism में किस स्थिति में कौनसा Function Execute होगा, इसका निर्ण; Compiler Program के Run Time में लेता है ना कि Compile Time में।

Overloading से Class User Class को सरल तरीके से अपने Program में Use करने का काम करता है जबकि Polymorphism का प्रयोग Class Creator करता है और Polymorphism Program को Class User के लिए Convenient बनाने के लिए नहीं किया जाता है बल्कि Polymorphism का प्रयोग पूरे Program के Architecture को प्रभावित करता है।

Polymorphism in C++: Normal Member Function Access

हम यहां जो पहला उदाहरण ले रहे हैं, उस उदाहरण में एक BaseClass Class हैं और दो Derived Class हैं। तीनों ही Classes में एक ही नाम का Member Function show() है, जिससे ये Functions Pointers के प्रयोग द्वारा Access किए जा रहे हैं। उदाहरण Program निम्नानुसार है:

// normal member functions accessed using pointers to objects
#include <iostream.h>
#include <conio.h>

class BaseClass                        	// BaseClass class
{
	public:
		void show()                 	// normal function
		{ 
			cout << "\nBaseClass"; 
		}
};

class DerivedClass1 : public BaseClass         	// derived class 1
{
	public:
	void show()
	{ 
		cout << "\nDerivedClass1"; 
	}
};

class DerivedClass2 : public BaseClass         	// derived class 2
{
	public:
		void show()
		{ 
			cout << "\nDerivedClass2"; 
		}
};

void main()
{
	DerivedClass1 dv1;      // object of derived class 1
	DerivedClass2 dv2;      // object of derived class 2
	BaseClass* ptr;        	// pointer to BaseClass class

	ptr = &dv1;       	// put address of dv1 in pointer
	ptr->show();      	// execute show()

	ptr = &dv2;       	// put address of dv2 in pointer
	ptr->show();      	// execute show()
	getch();
}

इस उदाहरण में DerivedClass1 व DerivedClass2 को BaseClass से Derive किया गया है। इन तीनों Classes में एक ही show() नाम का Function है। main() Function में Program दोनों Derived Classes के दो Simple Objects dv1 व dv2 और Base Class का एक Pointer Object ptr Create करता है। फिर Program DerivedClass1 के Object dv1 का Address BaseClass के Pointer Object ptr को निम्न Statement द्वारा Assign करता है:

ptr = &dv1;                 //Derived Class’s Address in Base Class’s Pointer

हमने पहले कहा है कि जिस Data Type का Pointer होता है उसमें उसी Data Type का Address Store किया जा सकता है। लेकिन यहां हम Base Class के Object में Derived Class का Pointer Store कर रहे हैं। ये Assignment Expression सही है और हम ऐसा इसलिए कर सकते हैं क्योंकि BaseClass “Kind of” Derived Class है। यानी Base Class व Derived Class एक दूसरे के Compatible है। अब सवाल ये है कि जब:

ptr->show();

Statement Execute होगा, तब निम्न में से कौनसा Member Funston Execute होगा:

BaseClass :: show()                        OR                          DerivedClass1 :: show()

यही सवाल हम तब भी पूंछ सकते हैं जब हम DerivedClass2 के Object का Address Pointer ptr में निम्नानुसार Store करके इसी Statement को निम्नानुसार Call करेंगे-

ptr->&dv2;                 //Put Address of DerivedClass2’s dv2 in BaseClass’s Pointer ptr
ptr->show();

यदि हम इस Program को Run करें तो हमें निम्नानुसार Output प्राप्त होता है:

BaseClass
BaseClass

इस Output का मतलब ये है कि दोनों ही स्थितियों में Base Class का Member Function ही Execute हो रहा है। यानी Compiler Pointer Object ptr में Stored Derived Class Object के Address को Ignore कर रहा है और चूंकि Pointer Object ptr BaseClass के Type का Instance है, इसलिए वह BaseClass के Member Function show() को ही Execute कर रहा है।

Polymorphism in C++: Virtual Member Function Accessed

चलिए, इसी उदाहरण Program में हम Base Class के Member Function show() को Declare करते समय virtual Keyword के प्रयोग से Member Function को Declare करते हैं, और देखते हैं कि अब Program के Output पर क्या प्रभाव पडता है। उदाहरण Program निम्नानुसार है:

// normal member functions accessed using pointers to objects
#include <iostream.h>
#include <conio.h>

class BaseClass                        	// BaseClass class
{
	public:
		virtual void show()             // normal function
		{ cout << "\nBaseClass"; }
};

class DerivedClass1 : public BaseClass         	// derived class 1
{
	public:
		void show()
		{ cout << "\nDerivedClass1"; }
};

class DerivedClass2 : public BaseClass         	// derived class 2
{
	public:
		void show()
		{ cout << "\nDerivedClass2"; }
};

void main()
{
	DerivedClass1 dv1;      // object of derived class 1
	DerivedClass2 dv2;      // object of derived class 2
	BaseClass* ptr;         // pointer to BaseClass class

	ptr = &dv1;       	// put address of dv1 in pointer
	ptr->show();      	// execute show()

	ptr = &dv2;       	// put address of dv2 in pointer
	ptr->show();      	// execute show()
	getch();
}

// Output
   DerivedClass1
   DerivedClass2

Output में हम देख सकते हैं कि BaseClass के Member Function से पहले virtual Keyword का प्रयोग कर देने से अब Main Program में Base Class के show() Function के स्थान पर Derived Classes के show() Member Functions का Execution हो रहा है। हम Base Class के Pointer ptr में जिस Derived Class के Object का Address Store करते हैं, उसी Derived Class के Member Function का Execution हो रहा है। इसलिए निम्न समान Statement :-

ptr-show();

दोनों बार ptr के Content के आधार पर अलग Functions Execute करता हैं। यानी Compiler उस Class के Member Function को Execute करता है, जिस Class के Object का Address Pointer ptr में होता है ना कि उस Class के Member Function को Execute करता है जिस Class के Type का स्वयं Pointer ptr होता है। यानी ये Statement (Instruction) इस समय एक Polymorphic Instruction है। हमने BaseClass में show() Member Function को virtual Keyword का प्रयोग करके Polymorphic बना दिया है। (Polymorphism in C++)

C++ Container Class
Early Binding and Late Binding in C++ - Virtual Functions

******

ये पोस्‍ट Useful लगा हो, तो Like कर दीजिए।

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 DOWNLOAD READ ONLINE

Download All Hindi EBooks

सभी हिन्दी EBooks C, C++, Java, C#, ASP.NET, Oracle, Data Structure, VB6, PHP, HTML5, JavaScript, jQuery, WordPress, etc... के DOWNLOAD LINKS प्राप्‍त करें, अपने EMail पर।

Register करके Login करें। इस Popup से छुटकारा पाएें।