Define Inheritance

Define Inheritance: Inheritance के एक सबसे सरल उदाहरण में कम से कम दो Class होती हैं। एक Base Class व दूसरी Derived Class. Base Class को किसी Special Syntax की आवश्‍यकता नहीं होती है जबकि Derived Class को ये बताया जाना जरूरी होता है कि कोई Derived Class किस Base Class से Derive किया गया है। ये काम Derived Class के बाद एक Colon को Place करके किया जाता है।  यानी हमें सबसे पहले Class Keyword लिखना होता है। फिर अपनी Derive Class का नाम लिखना होता है। फिर एक Colon लगाना होता है और public Keyword के साथ उस Class का नाम लिखना होता है, जिसके Featurs को Derive Class में प्राप्त करना होता है। इसे समझने के लिए निम्न उदाहरण देखिए:

class BaseClass
{
   // Member data and Functions
};

class DerivedClass : public BaseClass
{
   // Member data and Functions
};

Colon का मतलब है “Is Derived From” यानी Class DerivedClass को Class Base से Derive किया गया है और Base Class के सभी Data Members व Member Functions Derive Class में Inherit हो रहे हैं।  इसी Statement में एक Keyword public का प्रयोग किया गया है। इसे Access Specifier कहते हैं। हम public के स्थान पर private या protected Keyword का भी प्रयोग कर सकते हैं, लेकिन public का प्रयोग ही सर्वाधिक किया जाता है। इनको हम आगे विस्तार से समझेंगे। आइ, एक Detailed Program द्वारा Inheritance को समझते हैं।

// Program
#include <iostream.h>
Class Parent
{
	private:
		float flov;                       	// Parent's data

	public:
		void pget()                       	// get Parent's data
		{
			cout << "\n   Enter float value: ";
			cin >> flov;
		}

		void pdisplay()                   	// display Parent's data
		{
			cout << "flov=" << flov;
		}
};

class Child : public Parent
{
	private:
		int intv;                         	// Child has its own data

	public:
		void cget()                       	// get data for Child
		{
			pget();                        	// Call function in Parent
			cout << "   Enter integer value: ";
			cin >> intv;                   	// get Child-specific data
		}

		void cdisplay()
		{
			pdisplay();                    	// Call function in Parent
			cout << ", intv=" << intv;     	// show Child-specific data
		}
};

void main()
{
	Child ch;                            	// make a child Object
	cout << "Requesting data for child Object";
	ch.cget();                           	// get data for it
	cout << "Data in child Object is ";
	ch.cdisplay();                       	// display its data
}

Parent Class में flov Data Item के साथ pget() तथा pdisplay() Member Functions हैं। Child Class में intv नाम का एक Data Member व cget() तथा cdisplay() नाम के दो Member Functions हैं। main() Program में ये Program Child Class का एक Object Create करता है। User से Data Accept करता है और उसे Display करता है। इस Program का Output निम्नानुसार प्राप्त होता है:

Requesting data for child Object
   Enter float value: 456.789
   Enter integer value: 123
Data in child Object is flov=456.789, intv=123

इस Output में हम देख सकते हैं हालांकि Child Class में ch नाम का Integer प्रकार का केवल एक ही Data Member है, लेकिन फिर भी Output में हम देख सकते हैं कि हमने एक float प्रकार के मान को भी Object में Store व Retrieve कर लिया है।

ऐसा इसलिए सम्भव हुआ है क्योंकि Derived Class को उसकी Base Class के सभी गुण या Attributes प्राप्त हो जाते हैं। यानी Derived Class का एक Object Base Class के सभी Data Members को Inherit कर लेता है। इसीलिए Child Class के Object ch में ना केवल Data Item intv है बल्कि Base Class का Data Item flow भी ch में उपलब्ध है।

चूंकि Derived Class में cget()cdisplay() नाम के public Member Function हैं, इसलिए इन्हें main() Function से Access किया जा सकता है। इन्हीं Functions में Base Class के pget()pdisplay() Member Function को Call कर लिया गया है।

चूंकि ये Member Functions भी public हैं, इसलिए इन्हें भी कोई भी Function Call कर सकता है। इसलिए Parent Class के इन Member Functions को Child Class के Member Functions में Call कर लिया गया है। ऐसा इसलिए किया गया है, क्योंकि Child Class के Member Function Parent Class के private Data को Directly Access नहीं कर सकते हैं।

Parent Class के data Members को केवल Parent Class के public Member Functions ही Access कर सकते हैं। इसलिए Child Class के Member Functions में Parent Class के Member Functions को Call करके Parent Class के private Data को Access किया गया है।  इस तरह से Child Class का एक Object ch Child Class के Data के साथ-साथ Parent Class के Data को भी Access कर लेता है।

वास्तव में Derive Class के Member Functions Parent Class में नहीं हैं, लेकिन ये Functions Parent Class के Functions से बहुत ही Closely Related हैं।  हम देख सकते हैं कि दोनों ही Classes में User से Input प्राप्त करने के लिए दो अलग Functions pget() व cget() हैं। pget() Function Parent के Data Item के लिए Data प्राप्त करता है और cget() Function Child Class के Data Item के लिए Data प्राप्त करता है।

इसी तरह से Data को Display करने के लिए भी दोनों Classes में दो अलग Functions pdisplay() व cdisplay() हैं। pdisplay() Function Parent Class के Data को Display करता है और cdisplay() Child Class के Data को Display करता है। यानी Child Parent Class दोनों Classes के दो Member Functions समान काम ही करते हैं, लेकिन दोनों का नाम अलग-अलग है।

इस स्थिति में हम इन समान प्रकार के Member Function Overload करके एक नाम प्रदान कर सकते हैं जिससे हमें समान काम करने वाले दो Functions के दो नाम की जगह केवल एक ही नाम को याद रखना पडे। ये Modification करने पर Program कुछ निम्नानुसार हो जाता है:

class Parent
{
public:
   void display()   {  }
};

class Child : public Parent
{
public:
   void display()
   {
	  // display();        	// bad: Calls display() in Child
	  Parent: display();   	// good: Calls display() in Parent
   }
};

हमने Child Class में Parent Class के display() Function को Access करने के लिए Scope Resolution Operator का प्रयोग किया है। ऐसा इसलिए किया गया है, क्योंकि यदि हम केवल display() लिख कर Parent Class के display() Function को Call करें, तो Child Class के ही display() Function का Execution होगा और ये Function Infinite बार Execute होता रहेगा।  यानी ये एक Infinite Recursive Function बन जाएगा और Program Crash हो जाएगा। इसलिए इस Operator का प्रयोग करके Compiler को ये बताया जाता है, कि हम Parent Class के display() function को Call करना चाहते हैं। Function को Overload करने पर Program निम्नानुसार बनता है:

// Program
#include <iostream.h>
class Parent
{
	private:
		float flov;

	public:
		void get()
		{
			cout << "\n   Enter float value: ";
			cin >> flov;
		}

		void display()
		{
			cout << "flov=" << flov;
		}
};

class Child : public Parent
{
	private:
		int intv;

	public:
		void get()
		{
			Parent::get();
			cout << "    Enter integer value: ";
			cin >> intv;
		}

		void display()
		{
			Parent::display();
			cout << ", intv=" << intv;
		}
};
void main()
{
	Child ch;
	cout << "Requesting data for child Object";
	ch.get();
	cout << "Data in child Object is ";
	ch.display();
}
#include <iostream.h>
class Parent
{
	private:
		float flov;

	public:
		void get()
		{
			cout << "\n   Enter float value: ";
			cin >> flov;
		}

		void display()
		{
			cout << "flov=" << flov;
		}
};

class Child : public Parent
{
	private:
		int intv;

	public:
		void get()
		{
			Parent::get();
			cout << "    Enter integer value: ";
			cin >> intv;
		}

		void display()
		{
			Parent::display();
			cout << ", intv=" << intv;
		}
};
void main()
{
	Child ch;
	cout << "Requesting data for child Object";
	ch.get();
	cout << "Data in child Object is ";
	ch.display();
}

ये Program पिछले Program की तरह ही काम करता है। अन्तर केवल इतना है कि इस Program में Parent Class व Child Class दोनों के Member Functions को समान नाम देने के लिए इन्हें Overload किया गया है।  निम्न सारणी में बताया गया है कि किस प्रकार से एक Base Class व एक Derived Class से Overloaded Functions व Normal Functions को Access किया जा सकता है। यहां हम ये मान रहे हैं कि basefunc() Base Class का Member Function है और dervfunc() Derived Class का Member Function है।

Define Inheritance

यदि Functions Overloaded नहीं हैं तो Derived Class Base Class के Functions को उनके नाम से Access कर सकता है। लेकिन Overload की स्थिति में Base Class के Functions को Access करने के लिए Scope Resolution Operator का प्रयोग करना जरूरी होता है। निश्चित रूप से “C++” में Inheritance एक ही तरीके से काम करता है। यानी Derived Class में Base Class के सभी Featurs होते हैं लेकिन Base Class Derive Class को जानता भी नहीं है, इसलिए Base Class Derived Class के किसी भी Member को Access नहीं कर सकता है। (Define Inheritance – Wiki)

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