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

C++ में कंस्ट्रक्टर्स के अंदर वर्चुअल फंक्शन्स को कॉल करना


कंस्ट्रक्टर या डिस्ट्रक्टर से वर्चुअल फंक्शन्स को कॉल करना खतरनाक है और जब भी संभव हो इससे बचा जाना चाहिए क्योंकि जो वर्चुअल फंक्शन हम कॉल करते हैं, उसे बेस क्लास से कॉल किया जाता है न कि डेराइव्ड क्लास से।

कारण यह है कि C++ में सुपर-क्लासेस डेराइव्ड क्लासेस से पहले कंस्ट्रक्ट होती हैं। इसलिए, निम्नलिखित उदाहरण में, चूंकि D के इंस्टेंटिएट होने से पहले B को इंस्टेंटिएट किया जाना चाहिए। जब B का कंस्ट्रक्टर कॉल किया जाता है, तो यह अभी तक D नहीं है, इसलिए वर्चुअल फंक्शन टेबल में अभी भी B की s() की कॉपी की एंट्री है।

उदाहरण कोड

#include<iostream> using namespace std; class B {    public: B() {       s();    }    virtual void s() {       cout << "Base" << endl;    } }; class D: public B {    public: D() : B() {}    virtual void s() {       cout << "Derived" <<endl;    } }; int main() {    D de; }

आउटपुट

Base

  1. - C++ में डिफॉल्ट कंस्ट्रक्टर

    कंस्ट्रक्टर क्या है? कंस्ट्रक्टर क्लास का विशेष सदस्य फ़ंक्शन है जो ऑब्जेक्ट बनने पर स्वचालित रूप से 실행 होता है। क्लास के समान नाम, कोई रिटर्न टाइप नहीं। सदस्यों को प्रारंभिक मान देने के लिए उपयोगी। डिफॉल्ट कंस्ट्रक्टर कोई पैरामीटर नहीं लेता। यदि प्रोग्रामर परिभाषित न करे तो कंपाइलर अंतर्निहित डिफ

  1. - C++ में कंस्ट्रक्टर्स (Constructors)

    कंस्ट्रक्टर क्या हैं? क्लास के विशेष सदस्य फ़ंक्शन जो ऑब्जेक्ट बनने पर स्वचालित रूप से चलते हैं। क्लास के समान नाम, कोई रिटर्न टाइप नहीं। सदस्यों को प्रारंभिक मान देने के लिए प्राथमिक उपयोग। कंस्ट्रक्टर के दो मुख्य प्रकार 1. डिफॉल्ट कंस्ट्रक्टर कोई पैरामीटर नहीं लेता। यदि स्पष्ट रूप से परिभाषित न

  1. - C++ में कंस्ट्रक्टर के अंदर वर्चुअल फ़ंक्शन कैसे कॉल करें?

    कंस्ट्रक्टर या डिस्ट्रक्टर से वर्चुअल फ़ंक्शन्स को कॉल करना खतरनाक है और जब भी संभव हो इससे बचा जाना चाहिए। ऐसा इसलिए है क्योंकि आप जिस वर्चुअल फ़ंक्शन को कॉल करते हैं, वह बेस क्लास से कॉल होता है न कि डेराइव्ड क्लास से। C++ में हर क्लास अपने स्वयं के निर्माण में प्रवेश करने से पहले वर्चुअल मेथड टे