C++ Nested Class: हम किसी Class के अन्दर जब दूसरी Class Specification को Specify करते हैं तो इसे Class की Nesting करना कहते हैं। जैसे:
class alpha { private: class beta; { }; };
इस Code Segment में beta Class alpha Class में Nested है। इसका फायदा ये है कि इससे Classes के बीच की Conceptual Relationship बन जाती है। यदि beta का प्रयोग केवल alpha Class करता है और इसको alpha Class से बाहर कभी Instantiate नहीं किया जाता है तो इसे पूरी तरह से alpha Class के अन्दर Define करने का मतलब निकलता है।
Nested Class का एक और फायदा है। ध्यान रखें कि Normal Class का नाम व Member Class का नाम Global होता है। यानी ये पूरे Program में Visible होते हैं। लेकिन इस उदाहरण में] चूंकि beta Class alpha Class में Hidden है, इसलिए beta Class के Members के नाम को Program में कहीं अन्य स्थान पर किसी अन्य उद्देश्य के लिए बिना Name Conflicts की चिन्ता किए हुए] Use किया जा सकता है।
ये Name Conflict बडे Program में एक समस्या बन सकती है, जहां हजारों की संख्या में समान नाम को Use किया जाता है। इसलिए हमेंशा Global Name Spaces में Names की संख्या को Minimize रखना चाहिए। Name Conflicts से छुटकारा पाने का एक तरीका C++ में और है जिसे namespaces कहते हैं। इसके बारे में हम आगे के अध्याय में चर्चा करेंगे।
Communication between Nested Classes
हम Nested Classes के बीच किस प्रकार से Communicating कर सकते हैं \ Nested Classes में एक दूसरे के Data को Access करने के लिए कोई Automatic तरीका नहीं होता है। इसलिए सामान्य Non-Nested Classes के समान Nested Classes के बीच Communication प्राप्त करने के लिए हमें कुछ Extra काम करने पडते हैं। इस समस्या के समाधान के रूप में हम friend Classes का प्रयोग कर सकते हैं। इसे समझने के लिए निम्न Code Segment देखिए:
// one class nested inside another class alpha { private: int adata; class beta { private: int bdata; friend class alpha; // alpha is a friend of beta public: void bfunc() { alpha objA; objA.adata = 3; // access private alpha data } }; // end class beta friend class alpha::beta; // beta is a friend of alpha // (must follow beta) public: void afunc() { beta objB; objB.bdata = 2; // access private beta data objB.bfunc(); } }; // end class alpha void main() { alpha objA; objA.afunc(); getch(); }
Alpha Class का Member Function afunc() Beta Class के Private Data bdata को Access कर सकता है और beta Class का bfunc() alpha Class के Private Data adata को Access कर सकता है। जैसाकि हमने पहले भी देखा है कि Access Actual Objects के Variables में होना चाहिए। निम्न Statement पर ध्यान दें%
friend class alpha::beta
हमें ये Statement alpha Class में beta Class को Access करने के लिए लिखना जरूरी होता है। इसमें beta के Complete नाम को Use करना भी जरूरी होता है, जो कि alpha Class में Nested है और alpha::beta है। हमेंशा की तरह beta Class में alpha को friend बनाया गया है। चूंकि beta Class alpha Class में Hidden है इसलिए इसे निम्नानुसार Access नहीं कर सकते हैं:
void main() { alpha::beta objB; // Error: can't make a beta object }
क्योंकि beta Class alpha Class के बाहर Unknown है। (C++ Nested Class – StackOverflow)
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook C++ Programming Language in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
C++ Programming Language in Hindi | Page: 666 | Format: PDF