Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

क्या होता है जब सी ++ में व्युत्पन्न वर्ग विधि को अधिक प्रतिबंधात्मक पहुंच दी जाती है


इस खंड में हम दिलचस्प तथ्यों के बारे में चर्चा करेंगे जो 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() को बेस क्लास पॉइंटर के माध्यम से बुलाया जा रहा है, प्रोग्राम ठीक काम करता है क्योंकि बेस क्लास में डिस्प्ले() फ़ंक्शन सार्वजनिक है। एक्सेस स्पेसिफायर्स को कंपाइल टाइम पर वेरिफाई किया जाता है और डिस्प्ले () बेस क्लास में पब्लिक होता है। रन टाइम के दौरान, केवल पॉइंटेड ऑब्जेक्ट से संबंधित फ़ंक्शन को कॉल किया जाता है और एक्सेस स्पेसिफायर सत्यापित नहीं होता है। तो व्युत्पन्न वर्ग के एक निजी कार्य को आधार वर्ग के सूचक के माध्यम से बुलाया जा रहा है।


  1. C++ में एरो ऑपरेटर क्या है?

    डॉट और एरो ऑपरेटर दोनों का उपयोग C++ में किसी वर्ग के सदस्यों तक पहुंचने के लिए किया जाता है। वे बस विभिन्न परिदृश्यों में उपयोग किए जाते हैं। सी ++ में, वर्ग, संरचना, या संघ के रूप में घोषित प्रकारों को वर्ग प्रकार माना जाता है। तो निम्नलिखित उन दोनों को संदर्भित करता है। a.b का उपयोग केवल तभी किय

  1. C++ में डॉट ऑपरेटर क्या है?

    डॉट और एरो ऑपरेटर दोनों का उपयोग C++ में किसी वर्ग के सदस्यों तक पहुंचने के लिए किया जाता है। वे बस विभिन्न परिदृश्यों में उपयोग किए जाते हैं। सी ++ में, वर्ग, संरचना, या संघ के रूप में घोषित प्रकारों को वर्ग प्रकार माना जाता है। तो निम्नलिखित उन दोनों को संदर्भित करता है। a.b का उपयोग केवल तभी किय

  1. C++ में एक्सेस मॉडिफायर क्या हैं?

    डेटा छिपाना ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग की महत्वपूर्ण विशेषताओं में से एक है जो किसी प्रोग्राम के कार्यों को एक वर्ग प्रकार के आंतरिक प्रतिनिधित्व को सीधे एक्सेस करने से रोकता है। क्लास के सदस्यों के लिए एक्सेस प्रतिबंध लेबल किए गए एक्सेस संशोधक द्वारा निर्दिष्ट किया गया है:क्लास बॉडी के भीतर सार