BCA / B.Tech 9 min read

virtual Function in Hindi

Virtual Function in C++ in  Hindi | वर्चुअल फंक्शन :


  • वर्चुअल फंक्शन C++ की एक महत्वपूर्ण अवधारणा है जो पॉलिमॉरफिज़्म (Polymorphism) को लागू करने के लिए प्रयोग की जाती है। यह ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग (OOP) का एक अभिन्न हिस्सा है। 
  • वर्चुअल फंक्शन की सहायता से  हम यह सुनिश्चित करते हैं कि डेरिव्ड क्लास (Derived Class) का फंक्शन रन-टाइम पर कॉल हो, भले ही हम उस फंक्शन को बेस क्लास के पॉइंटर या रेफरेंस से कॉल कर रहे हों। वर्चुअल 
  • फंक्शन हमें रन-टाइम पर सही प्रकार के फंक्शन को बुलाने की सुविधा प्रदान करता है, जिसे डायनामिक बाइंडिंग (Dynamic Binding) या रन-टाइम पॉलिमॉरफिज़्म कहा जाता है।
  • वर्चुअल फंक्शन C++ में एक महत्वपूर्ण अवधारणा है जो रन-टाइम पॉलिमॉरफिज़्म को लागू करता है। इसका उपयोग तब होता है जब हमें किसी बेस क्लास के पॉइंटर या रेफरेंस के माध्यम से डेरिव्ड क्लास के फंक्शन को कॉल करना होता है।
  •  वर्चुअल फंक्शन के उपयोग से प्रोग्राम  अधिक लचीला और डायनामिक हो जाता है, जो जटिल और बड़े प्रोग्राम्स के लिए आवश्यक होता है। हालांकि इसके कुछ नुकसान भी हैं, लेकिन सही स्थिति में वर्चुअल फंक्शन का उपयोग कोड को सरल और प्रभावी बनाता है।
वर्चुअल फंक्शन क्या है? (What is a Virtual Function?)

  • वर्चुअल फंक्शन एक ऐसा फंक्शन होता है जिसे बेस क्लास में घोषित किया जाता है और जिसे डेरिव्ड क्लास में ओवरराइड (Override) किया जा सकता है। जब हम एक बेस क्लास के पॉइंटर का उपयोग करते हुए किसी डेरिव्ड क्लास का ऑब्जेक्ट एक्सेस करते हैं,
  •  तो वर्चुअल फंक्शन की मदद से हम यह सुनिश्चित कर सकते हैं कि डेरिव्ड क्लास का फंक्शन रन-टाइम पर कॉल हो।

सिंटैक्स (Syntax):

class Base {
public:
    virtual void show() {  // वर्चुअल फंक्शन
        cout << "Base class show function" << endl;
    }
};

class Derived : public Base {
public:
    void show() override {  // ओवरराइड किया गया फंक्शन
        cout << "Derived class show function" << endl;
    }
};
यहां Base क्लास में show फंक्शन वर्चुअल है, और इसे Derived क्लास में ओवरराइड किया गया है। जब हम बेस क्लास के पॉइंटर या रेफरेंस के माध्यम से डेरिव्ड क्लास के ऑब्जेक्ट का एक्सेस करते हैं, तब वर्चुअल फंक्शन की मदद से डेरिव्ड क्लास का show फंक्शन कॉल होगा।

Features of Virtual Function in  C++ in Hindi | वर्चुअल फंक्शन की विशेषताएँ :

  • रन-टाइम पॉलिमॉरफिज़्म: वर्चुअल फंक्शन का मुख्य उद्देश्य रन-टाइम पॉलिमॉरफिज़्म को प्राप्त करना है। इसका मतलब है कि कौन सा फंक्शन कॉल होगा, यह निर्णय रन-टाइम पर होता है, न कि कंपाइल-टाइम पर।
  • डायनामिक बाइंडिंग: वर्चुअल फंक्शन डायनामिक बाइंडिंग का समर्थन करते हैं, जिसका मतलब है कि फंक्शन का सही वर्शन रन-टाइम पर चुना जाता है।
  • ओवरराइडिंग (Overriding): वर्चुअल फंक्शन को डेरिव्ड क्लास में ओवरराइड किया जा सकता है। अगर डेरिव्ड क्लास में वर्चुअल फंक्शन को ओवरराइड नहीं किया गया है, तो बेस क्लास का फंक्शन ही काम करेगा।
  • वर्चुअल कीवर्ड: वर्चुअल फंक्शन को बेस क्लास में virtual कीवर्ड के साथ घोषित किया जाता है।
  • पॉइंटर के माध्यम से कॉल: वर्चुअल फंक्शन को ज्यादातर पॉइंटर या रेफरेंस के माध्यम से एक्सेस किया जाता है। जब हम बेस क्लास के पॉइंटर से डेरिव्ड क्लास का फंक्शन कॉल करते हैं, तो वर्चुअल फंक्शन सुनिश्चित करता है कि डेरिव्ड क्लास का फंक्शन ही एक्सीक्यूट हो।
  • वर्चुअल डेस्ट्रक्टर (Virtual Destructor): वर्चुअल फंक्शन की तरह ही अगर हम बेस क्लास में डेस्ट्रक्टर को वर्चुअल बनाते हैं, तो यह सुनिश्चित करता है कि डेरिव्ड क्लास का डेस्ट्रक्टर भी ठीक तरह से कॉल हो।

Example of Virtual Function in C++ in Hindi | वर्चुअल फंक्शन का उदाहरण :

नीचे एक उदाहरण दिया गया है जो वर्चुअल फंक्शन की कार्यविधि को दर्शाता है:

#include<iostream>
using namespace std;

class Base {
public:
    virtual void show() {  // वर्चुअल फंक्शन
        cout << "Base class show function" << endl;
    }
};

class Derived : public Base {
public:
    void show() override {  // डेरिव्ड क्लास में ओवरराइड किया गया फंक्शन
        cout << "Derived class show function" << endl;
    }
};

int main() {
    Base* basePtr;  // बेस क्लास का पॉइंटर
    Derived derivedObj;  // डेरिव्ड क्लास का ऑब्जेक्ट
    basePtr = &derivedObj;  // डेरिव्ड क्लास का पता बेस क्लास के पॉइंटर में

    basePtr->show();  // वर्चुअल फंक्शन का कॉल
    return 0;
}
आउटपुट:

Derived class show function

इस उदाहरण में, बेस क्लास के basePtr पॉइंटर से डेरिव्ड क्लास का ऑब्जेक्ट एक्सेस किया जा रहा है। हालांकि पॉइंटर बेस क्लास का है, वर्चुअल फंक्शन की मदद से डेरिव्ड क्लास का show फंक्शन ही कॉल होता है, जो कि रन-टाइम पॉलिमॉरफिज़्म का उदाहरण है।

Advantages of Virtual Function in C++ in Hindi | वर्चुअल फंक्शन के लाभ :

  • रन-टाइम पॉलिमॉरफिज़्म: वर्चुअल फंक्शन की सहायता से रन-टाइम पर सही फंक्शन कॉल होता है, जिससे प्रोग्राम अधिक लचीला और कार्यक्षम बनता है।
  • ओवरराइडिंग: वर्चुअल फंक्शन को ओवरराइड करके हम बेस और डेरिव्ड क्लास में समान नाम वाले फंक्शन के अलग-अलग इंप्लिमेंटेशन कर सकते हैं।
  • रिड्यूस्ड कोड डुप्लिकेशन: वर्चुअल फंक्शन का उपयोग करके कोड में डुप्लिकेशन कम किया जा सकता है क्योंकि हम बेस और डेरिव्ड क्लास में एक ही नाम का फंक्शन अलग-अलग व्यवहार के साथ परिभाषित कर सकते हैं।
  • डायनामिक बाइंडिंग: वर्चुअल फंक्शन डायनामिक बाइंडिंग के माध्यम से सही फंक्शन का चयन करते हैं, जो कि जटिल प्रोग्राम्स में उपयोगी है जहां कई डेरिव्ड क्लास होते हैं।
Disadvantages of Virtual Function in C++ in Hindi | वर्चुअल फंक्शन के नुकसान :

  • प्रदर्शन पर प्रभाव (Performance Overhead): वर्चुअल फंक्शन का उपयोग करने से रन-टाइम पर डायनामिक बाइंडिंग होती है, जिससे प्रोग्राम के प्रदर्शन में थोड़ा प्रभाव पड़ सकता है क्योंकि रन-टाइम पर फंक्शन की पहचान होती है।
  • कंप्लेक्सिटी (Complexity): वर्चुअल फंक्शन का उपयोग प्रोग्राम को थोड़ा जटिल बना सकता है, विशेष रूप से तब जब बहुत सारे डेरिव्ड क्लास और वर्चुअल फंक्शन हों।
  • गलत ओवरराइडिंग: अगर डेरिव्ड क्लास में वर्चुअल फंक्शन को सही तरीके से ओवरराइड नहीं किया गया है, तो यह बेस क्लास का फंक्शन कॉल करेगा, जिससे प्रोग्राम के व्यवहार में अस्थिरता आ सकती है।