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

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


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

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

उदाहरण

#include<iostream>
using namespace std;

class Base {
public:
   Base() { f(); }
   virtual void f() { std::cout << "Base" << std::endl; }
};
class Derived : public Base {
public:
   Derived() : Base() {}
   virtual void f() { std::cout << "Derived" << std::endl; }
};

int main() {
   Derived d;    
   return 0;
}

आउटपुट

यह आउटपुट देगा -

Base

  1. C++ में एक समांतर चतुर्भुज के अंदर एक त्रिभुज का क्षेत्रफल

    एक आकृति का क्षेत्रफल द्वि-आयामी तल में आकृति की सीमा है। त्रिकोण तीन भुजाओं वाला बहुभुज है। समांतर चतुर्भुज एक चतुर्भुज है जिसकी सम्मुख भुजाएँ समान और समानांतर हैं। इस कार्यक्रम में, हमारे पास इसके आधार और ऊंचाई के साथ एक समांतर चतुर्भुज है और इसने एक त्रिभुज को उसी आधार पर अंकित किया है जो सम

  1. सी ++ में व्युत्पन्न क्लास फ़ंक्शन से पैरेंट क्लास फ़ंक्शन को कैसे कॉल करें?

    व्युत्पन्न वर्ग फ़ंक्शन से पैरेंट क्लास फ़ंक्शन को कॉल करने के लिए निम्नलिखित एक उदाहरण है। उदाहरण #include <bits/stdc++.h> using namespace std; class p1 {    public:    void first() {       cout << "\nThe parent class p1 function is called.";

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

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