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

क्या होता है जब C++ में एक गैर-आभासी फ़ंक्शन के अंदर वर्चुअल फ़ंक्शन को कॉल किया जाता है?


इस खंड में हम C++ में आभासी कक्षाओं के बारे में रोचक तथ्यों के बारे में चर्चा करेंगे। हम पहले दो मामले देखेंगे, फिर हम तथ्य का विश्लेषण करेंगे।

  • सबसे पहले प्रोग्राम को बिना किसी वर्चुअल फंक्शन का उपयोग किए निष्पादित करें।

  • गैर-आभासी फ़ंक्शन के तहत किसी भी वर्चुअल फ़ंक्शन का उपयोग करके प्रोग्राम को निष्पादित करें।

उदाहरण

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

#include <iostream>
using namespace std;
class BaseClass {
public:
   void display(){
      cout << "Print function from the base class" << endl;
   }
   void call_disp(){
      cout << "Calling display() from derived" << endl;
      this -> display();
   }
};
class DerivedClass: public BaseClass {
public:
   void display() {
      cout << "Print function from the derived class" << endl;
   }
   void call_disp() {
      cout << "Calling display() from derived" << endl ;
      this -> display();
   }
};
int main() {
   BaseClass *bp = new DerivedClass;
   bp->call_disp();
}

आउटपुट

बेस क्लास से
Calling display() from base class
Print function from the base class

आउटपुट से, हम समझ सकते हैं कि पॉलीमॉर्फिक व्यवहार तब भी काम करता है जब एक वर्चुअल फ़ंक्शन को गैर-वर्चुअल फ़ंक्शन के अंदर कहा जाता है। vptr और vtable को लागू करते हुए रनटाइम पर कौन सा फ़ंक्शन कॉल किया जाएगा यह तय किया जाता है।

  • vtable - यह फंक्शन पॉइंटर्स की एक टेबल है, जिसे प्रति क्लास मेंटेन किया जाता है।

  • vptr - यह vtable के लिए एक सूचक है, प्रति ऑब्जेक्ट इंस्टेंस बनाए रखा जाता है।


  1. सी ++ में वर्चुअल विनाशकों का उपयोग कब करें?

    स्कॉट मेयर्स इन इफेक्टिव C++ कहते हैं - यदि किसी वर्ग में कोई वर्चुअल फ़ंक्शन है, तो उसके पास एक वर्चुअल डिस्ट्रक्टर होना चाहिए, और वह वर्ग जो बेस क्लास के लिए डिज़ाइन नहीं किया गया है या पॉलीमॉर्फिक रूप से उपयोग करने के लिए डिज़ाइन नहीं किया गया है, उसे वर्चुअल डिस्ट्रक्टर घोषित नहीं करना चाहिए।

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

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

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

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