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++ में वर्चुअल डिस्ट्रक्टर्स का उपयोग कब करना चाहिए?

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

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

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

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

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