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

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++ में समांतर चतुर्भुज के अंदर त्रिभुज का क्षेत्रफल C++ में समांतर चतुर्भुज के अंदर त्रिभुज का क्षेत्रफल

    समस्या विवरण एक समांतर चतुर्भुज दिया गया है जिसका आधार और ऊंचाई ज्ञात है। इसमें एक त्रिभुज अंकित है जिसका आधार समांतर चतुर्भुज के समान है। त्रिभुज का क्षेत्रफल ज्ञात करें। सूत्र क्षेत्रफल = ½ × आधार × ऊंचाई area = 0.5 * b * h उदाहरण कोड #include <iostream> #include <cmath> using names

  1. - C++ में डेराइव्ड क्लास फंक्शन से पेरेंट क्लास फंक्शन कैसे कॉल करें?

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

  1. - C++ में वर्चुअल डिस्ट्रक्टर्स का उपयोग कब करना चाहिए?

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