Protected Access Specifier

Protected Access Specifier: आप देख सकते हैं कि Base Stack Class में एक Constructor है, लेकिन Derived Stack2 Class में कोई Constructor नहीं है। जब हम Stack2 Derived Class का Object Create करते हैं, तो Compiler Check करता है कि इसमें कोई Constructor है या नहीं।  यदि Constructor होता है, तो Compiler इस Constructor को Call करने की व्‍यवस्था करता है। यदि Constructor नहीं होता है तो Compiler Base Class के Constructor को Call करता है। Base Class के Constructor के Call होने का ये नियम केवल No-Argument Constructor के लिए लागू होता है। Stack Class के इस Constructor का काम top Index को Initialize करना होता है जो ये तय करता है कि Stack अभी Empty है।

पिछले Post में आप देख सकते हैं कि हमने Base Stack Class से Derive Stack2 Class को Inherit करने से पहले थोडा सा Alteration किया है। हमने Stack Class के Data Member को private Access Specifier से बदल कर protected Access Specifier को Use किया है।

जैसाकि हमने अभी तक सीखा है कि private Access Specifier के Data Members को केवल उसी Class के Member Functions Access कर सकते हैं। जबकि public Access Specifier का प्रयोग करने पर Program का कोई भी Function इन Data को Use कर सकता है। protected Access Specifier का काम इनके बीच का है।

protected Access Specifier या Class के protected Area में Declare किए गए Data Members को उसी Class के Member Function तो Use कर ही सकते हैं, साथ ही उसी Class से Inherited Derived Class के Member Functions भी इन्हें Directly Access कर सकते हैं।

protected Access Specifier एक तरह का Family Oriented Access Specifier है। यानी किसी Class की Family के जितने भी Derived Class होते हैं, उन सभी Derived Classes के Member Functions Base Class के protected Area के Data Members व Member Functions को Directly Access कर सकने में सक्षम होते हैं।

Base Stack Class के Creators जब पहली बार Stack Class Create करते हैं, तो उन्हें उस Base Stack Class के Data को protected रखने की जरूरत होती है, ताकि यदि कोई व्‍यक्ति उस Base Stack Class से कोई अन्‍य Class Derive करे, तो वह Base Stack Class के Data को Access कर सके।  वास्तव में Base Class के Data को Protected रखने पर Base Class का Data उतना ही असुरिक्षत होता है जितना उसे public रखने पर होता है।

इससे पहले कि हम आगे बढें हम यहां ये बता देना चाहते हैं कि कुछ विशेष प्रकार के Functions Automatically Inherit नहीं होते हैं। इसे समझने के लिए निम्न Code Segment देखिए:

class alpha
{
	int data;

	public:
		void afunction()
		{
			cout << “Enter Number “;
			cin >> data;
		}
};

class beta : public alpha
{
};

हम देख सकते हैं कि alpha Class में एक afunction() नाम का Function है और इसे Derived Class beta में Overload नहीं किया गया है, तो Derive Class beta का कोई Object Base Class alpha के इस Function को निम्नानुसार Dot Operator के प्रयोग द्वारा Call कर सकता है:

beta betaObject;
betaObject.afunction();

ये Function afunction() Automatically Derived Class beta में Inherit हो जाता है।

सिद्धांत ये है कि afunction() Function केवल Base Class alpha के Data पर ही Operate होता है। इसे Derived Class से Interact करने की कोई जरूरत नहीं है। फिर भी हम कुछ ऐसे Functions जैसे कि Overloaded Assignment Operators, Destructors और सभी प्रकार के Constructors के बारे में पढ चुके हैं, जो Base Class में अलग प्रकार का काम कर सकते हैं और Derived Class में अलग प्रकार का।

चलिए, हम Constructors को ही लेते हैं। Base Class का Constructor, Base Class के Data को Initialize करेगा और Derived Class का Constructor, Derived Class के लिए Data को Initialize करेगा। चूंकि Base Class व Derived Class दोनों के Constructors अलग प्रकार के Data को Initialize करेंगे, इसलिए इन दोनों Class के Constructors को एक दूसरे के स्थान पर Use नहीं किया जा सकता है। यानी हम कह सकते हैं कि Constructors Automatically Inherit नहीं होते हैं।

इसी तरह से Assignment Operator Equal To को लेते हैं। ये Operator Derived Class में Derived Class के Data को मान Assign करेगा जबकि Base Class में Base Class के Data को मान Assign करेगा। यानी ये Operator दोनों Classes में अलग प्रकार का Assignment करेगा, इसलिए ये भी Automatically Base Class से Derived Class में Inherit नहीं हो सकता।

यदि हम सरल तरीके से इन में से किसी Non – Inheritable Function को मानलो कि Assignment Operator को Base Class में Define करते हैं और उतने ही सरल तरीके से इसे Derived Class में Define नहीं करते हैं, तो “C++” का Compiler हमारे Program के लिए इस Operator का एक Default Version Generate करता है। ऐसा होने पर Default Copy Constructor व Default = Operator दोनों Member Wise Copying व Assignment Perform करते हैं। (Protected Access Specifier – 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