इस खंड में हम दिलचस्प तथ्यों के बारे में चर्चा करेंगे जो C++ में व्युत्पन्न वर्ग विधियों की प्रतिबंधित पहुंच है। C++ में व्युत्पन्न वर्ग विधियों का उपयोग करने के प्रतिबंधों के बारे में अधिक जानने के लिए हम कुछ उदाहरण देखेंगे और आउटपुट का विश्लेषण करेंगे।
उदाहरण (C++)
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
#include <iostream> using namespace std; class BaseClass { public: virtual void display(){ cout << "Print function from the base class" << endl; } }; class DerivedClass: public BaseClass { private: void display() { cout << "Print function from the derived class" << endl; } }; int main() { }
यह ठीक है, अब अगर हम मुख्य फ़ंक्शन ब्लॉक को इसके साथ बदलते हैं, तो हमें नीचे की तरह एक त्रुटि मिलेगी -
int main() { DerivedClass d; d.display(); }
आउटपुट
main.cpp: In function ‘int main()’: main.cpp:20:15: error: ‘virtual void DerivedClass::display()’ is private within this context d.display(); ^ main.cpp:13:10: note: declared private here void display() { ^~~~~~~
यह एक त्रुटि दिखाता है क्योंकि व्युत्पन्न वर्ग में विधि निजी है। अब इस कार्यान्वयन को देखें, जहां बेस पॉइंटर का उपयोग करके फ़ंक्शन को कॉल किया जाता है। यह फ़ंक्शन को कॉल कर सकता है।
उदाहरण (C++)
#include <iostream> using namespace std; class BaseClass { public: virtual void display(){ cout << "Print function from the base class" << endl; } }; class DerivedClass: public BaseClass { private: void display() { cout << "Print function from the derived class" << endl; } }; int main() { BaseClass *b = new DerivedClass; b->display(); }
आउटपुट
Print function from the derived class
उपरोक्त कार्यक्रम से, हम देख सकते हैं कि निजी फ़ंक्शन DerivedClass::display() को बेस क्लास पॉइंटर के माध्यम से बुलाया जा रहा है, प्रोग्राम ठीक काम करता है क्योंकि बेस क्लास में डिस्प्ले() फ़ंक्शन सार्वजनिक है। एक्सेस स्पेसिफायर्स को कंपाइल टाइम पर वेरिफाई किया जाता है और डिस्प्ले () बेस क्लास में पब्लिक होता है। रन टाइम के दौरान, केवल पॉइंटेड ऑब्जेक्ट से संबंधित फ़ंक्शन को कॉल किया जाता है और एक्सेस स्पेसिफायर सत्यापित नहीं होता है। तो व्युत्पन्न वर्ग के एक निजी कार्य को आधार वर्ग के सूचक के माध्यम से बुलाया जा रहा है।