Private Inheritance: यदि public Keyword के स्थान पर private keyword का प्रयोग कर दिया जाए, तो इसे Private Inheritance कहते हैं। जैसे :
class Alpha { }; class Beta : private Alpha { };
आधारभूत रूप से जब एक Class को Private Inheritance द्वारा Inherit किया जाता है, तब इस Derived Class के Object Base Class के किसी भी Member को Access नहीं कर पाते हैं, फिर इससे कोई अन्तर नहीं पडता है कि Base Class में Class Members के लिए किस Access Specifier का प्रयोग किया गया है। इसका प्रभाव ये होता है कि Derived Class के लिए Base Class पूरी तरह से Hidden रहती है। यानी Derived Class के Object यही समझते हैं कि उनका कोई Base Class नहीं है। जबकि एक Public Inheritance में Derived Class के Member Functions में लिखे गए Statements Base Class के Public व Protected Members को Access कर सकते हैं।
Private Inheritance में Derived Class को कोई भी “Kind Of” Base Class प्राप्त नहीं होता है। यानी Derived Class के Objects Base Class के बारे में कुछ भी नहीं जानते हैं, हालांकि Base Class Derived Class का एक हिस्सा (“Part Of”) होता है। ये लगभग Composition के समान होता है, जिनमें एक “Has a” Relationship होती है।
यानी Derived Class में Base Class का एक Object होता है लेकिन Derived Class का Object Base Class के बारे में कुछ भी नहीं जानता है। (The derived class “Has An” object of the base class, but objects of the derived class don’t know about it.)
चूंकि, Private Inheritance लगभग एक Composition के समान ही होता है, इसलिए अक्सर इस प्रकार के Inheritance के स्थान पर Composition का ही प्रयोग कर लिया जाता है। यानी ऊपर जो Code Fragment दर्शाया गया है, हमें इसमें केवल Alpha Class के एक Object को Beta Class में Declare करना होता है। यदि हम ऐसा करते हैं, तो ये एक प्रकार का Private Inheritance हो जाता है। यानी:
class Alpha { }; class Beta { private: Alpha alphaObject; };
alphaObject को Beta Class में Private Area में रखा गया है। इसलिए ये Beta Object के लिए अभी भी Hidden ही है। Composition दो Classes के बीच एक सरल, अधिक Clear व कम Complicated Relationship है। इसलिए यदि हमें Private Inheritance की जरूरत हो, तो हम इस Inheritance के स्थान पर Composition Relationship का प्रयोग कर सकते हैं।
Compiler जब Private Inheritance को देखता है, तो वह इसे एक Composition की तरह ही Treat करता है। परिणामस्वरूप Compiler लम्बे समय तक ये बर्दाश्त नहीं करता है कि एक Base Class Object के स्थान पर Derived Class Object को Use किया जाए। निम्न Program में Public व Private दोनों Inheritance को दर्शाया गया है।
// a derived class object is a kind of base class object, // but not if it's privately derived class alpha // base class { public: void memfunc() // public member function { } }; class beta : public alpha // public derivation { }; class gamma : private alpha // private derivation { }; void main() { void anyfunc(alpha); // function takes alpha argument alpha aa; // object of type alpha beta bb; // object of type beta gamma gg; // object of type gamma bb.memfunc(); // ok gg.memfunc(); // error: 'memfunc() not accessible' anyfunc(bb); // ok anyfunc(gg); // error: 'cannot convert gamma to alpha' aa = bb; // ok aa = gg; // error: 'cannot convert gamma to alpha' }
इस Program में हमने एक gamaa Class को Private Mode में Derive किया है। Compiler हमें ये सुविधा नहीं देता है कि हम gamaa Object से alpha Class के किसी Member Function को Call कर सकें या किसी gamaa Object को उस Function में Argument के रूप में Pass कर सकें] जिसे alpha Object की जरूरत है या किसी alpha Object मे gama Object को Assign कर सकें।
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook C++ Programming Language in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
C++ Programming Language in Hindi | Page: 666 | Format: PDF