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

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

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

कारण यह है कि सी ++ में सुपर-क्लास व्युत्पन्न कक्षाओं से पहले बनाए जाते हैं। तो, निम्नलिखित उदाहरण में, जैसा कि बी को तत्काल किया जाना चाहिए, डी के तत्काल होने से पहले। जब 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++ में कंस्ट्रक्टर्स

    कंस्ट्रक्टर एक वर्ग के कार्य होते हैं जिन्हें तब निष्पादित किया जाता है जब कक्षा की नई वस्तुएँ बनाई जाती हैं। कंस्ट्रक्टर्स का नाम क्लास के समान है और कोई रिटर्न टाइप नहीं है, यहां तक ​​​​कि शून्य भी नहीं है। वे प्राथमिक रूप से वर्ग के चरों के लिए प्रारंभिक मान प्रदान करने के लिए उपयोगी होते हैं। द

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

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