C++ में Virtual function तथा Pure virtual function की सम्पूर्ण जानकारी 

What is Virtual function in C++ in Hindi

C++ में एक Virtual function, Base class में Define(परिभाषित )किया गया एक विशेष प्रकार का function है जिसे एक Derived class द्वारा Redefine(पुन: परिभाषित) किया जा सकता है।

यह Program को Runtime में यह निर्णय लेने की अनुमति देता है कि Object के आधार पर कौन से Function को Call करना है।
जब Base class में एक function को Virtual function की तरह Declare किया जाता है तब C++ एक Table का निर्माण करता है, जो vtable(Virtual table) कहलाता है 

यह Table एक Class के Virtual functions के लिए एक Pointer को Store करता है जब Derived class एक Virtual function को Overrides (Change) करता है।तब 

vtable को Update किया जाता है कि वह Derived class के Virtual function के Version को Point करे। 

इस प्रकार यदि आपके पास Base class pointer है जो Derived class के Object को Point करता है, तथा जब आप Virtual function को Call करते हैं, तो Derived class का function Execute होगा न कि Base class का function

यह तब बहुत मददगार होता है जब आप चाहते हैं कि आपका Program विभिन्न प्रकार की Object के साथ लचीले तरीके से काम करे।

हालाँकि, Virtual functions का Use करने से Program की Speed थोड़ी धीमी हो जाती है क्योंकि Program को vtable में सही function को देखना होता है। 

भले ही इस प्रक्रिया में अतिरिक्त कार्य रहता है , लेकिन यह महत्वपूर्ण है क्योंकि यह Program के Run होने के दौरान सही function को चुनने की अनुमति देता है, जो C++ में Run time Polymorphism के लिए आवश्यक है।

Definiation of Virtual function in Hindi

"C++ में एक Virtual function एक Base class का function है जो एक Derived class द्वारा बदला जा सकता है।. 
यह Program को Object के type के आधार पर, Program execution के दौरान, कौन सा Function को Use करना है इसकी अनुमति देता है"
Rules for Virtual function in Hindi
1) एक Virtual function वह Function है जिसे Base class मे Declare किया जाता है और वह एक Derived class के द्वारा Override हो सकता है।

2) आप Virtual functions को Classes के अंदर उपयोग कर सकते है उसे Class के बाहर Declare नहीं किया जा सकता।

3) Polymorphism प्राप्त करने के लिए, Virtual function को Pointer या Base class के Reference के माध्यम से Call किया जाना चाहिए।

4) जब आप किसी Derived class में एक Virtual function को Override करते हैं तब इसका Name, Parameters,और Return type Base class के समान होना चाहिए।

5) यदि आपके Class के पास Virtual functions हैं तो उसमें एक Virtual destructor भी होना एक अच्छा विचार है ताकि यह सुनिश्चित हो सके कि Derived class के Object को सही तरीके से साफ किया गया है।

6) यदि आप Base class में एक Virtual function को `0` मे Set करते हैं तो यह एक Pure virtual function बन जाता है। यह Base class को Abstract बना देता है अर्थात आप उस Class के Objects नही बना सकते हैं। 

7) आप Virtual functions, को ' static' की तरह declare नही कर सकते क्योंकि उन्हे Derived class में Override किया जाना होता है

8) एक Constructor को Virtual function की तरह Declare नही कर सकते हैं।

9) Virtual functions `public`, `protected`, या `private`, हो सकतें है जो इस बात पर निर्भर कर्ता है कि आप Access को कैसे Control करते हैं।

10) जब आप एक Virtual function को Derived class में Override करते हैं तब आपको फिर से `virtual` keyword Use करने की आवश्यकता नही होती है, परंतु यह आपके Code को समझने मे आसान बनाता है।
Program for Virtual function
#include<iostream> 
using namespace std;
class Base {
public:
    virtual void show() { // Virtual function
        cout << "I am from Base class." << endl;
    }
};
class Derived : public Base {
public:
    void show() override { // Override the base class function
        cout << "I am from Derived class." << endl;
    }
};
int main() {
    Derived d1;
    // Pointer of Base type pointing to Derived object
    Base* b1 = &d1;

    b1->show(); // Calls Derived class's show function due to override
    return 0;
}
Output:
I am from Derived class.

Explaination:
1) Base Class: 
`Base` class के पास virtual function `show ()` है जो एक Message दिखाता है।

2) Derived Class: 
`Derived` class, Base से inherits होता है और `show()` function को override करता है जो Derived class से एक Message, दिखाता है।

3) Main Function: 
`main()`, में एक `Derived` object `d1` का निर्माण किया जाता है।

4) Base Pointer: 
 `Base` (`b1`) type एक Pointer बनाया जाता है जो `Derived` object `d1` को Point करता है।

5) Function Call:
जब `b1->print()` को call किया जाता है, `show ()` function जो `Derived` class से है Execute किया जाता है क्योंकि यह Base class को overrides करता है।

6) Output
 "I am from Derived class." 
यह Output, दिखाता है कि override होने के कारण Derived class का function Use किया जाता है।

Advantages of Virtual function in C++ in Hindi

C++ में Virtual function के निम्न फायदे है
1) Virtual functions, विभिन्न Classes को एक साथ लगातार कार्य करने मे मदद करता है।

2) Virtual functions, Coding को ज्यादा लचीला और अनुकुल बनाता है l

3) Virtual functions, पहले से मौजूद Code मे बिना बदलाव किए नए विशेषताओ को जोड़ना आसान बनाता है।

4) Virtual functions, विभिन्न Classes के साथ Code को पुन: उपयोग करने की अनुमति देता है।

5) Virtual functions, Code को Update तथा Maintain करना आसान बनाता है।
 
6) Virtual functions, Code को पढ़ने और समझना आसान बनाता है।

7) Virtual functions, Code को Run time में Dynamically व्यवहार करने की अनुमति देता है।

8)Virtual functions, जटिल क्रियान्वयन विवरण को छुपा देता है।

9) Virtual functions, Code ki Testing को सरल बनाता है

Pure Virtual Function in C++ in Hindi 

C++ में एक Pure virtual ऐसा function है जो Base class में Declare किया जाता है लेकिन उस class में उसकी Definiation नही रहती है लेकिन इसे Derived classed द्वारा Override किया जाता है।

आप Pure virtual function को '0' Set करके Base class में बना सकते है जब एक Class के पास कम से कम एक Pure virtual function, होता है तब वह Class एक Abstract class अर्थात ऐसा Class बन जाता है जिसके लिए आप सीधे Object का निर्माण नही कर सकते हैं।

एक Pure virtual function के पीछे मुख्य विचार यह है कि Derived classes को उस function का अपना संस्करण बनाने के लिए force करना हैl

उदाहरण के लिए आप के पास Shape नामक एक Base class है जिसमे एक Pure virtual function, draw(), नाम से है।

जब कोई Class जैसे Circle, Triangle आदि को इस Base class से Inherit किया जायेगा तब इन Derived classes (Circle, Triangle) में इस draw() function का खुद संस्करण बनाना होगा।

Pure virtual function का उद्देश्य यह सुनिश्चित करना है कि Base class से Inherit किसी भी Class(Derived class)को उस function का अपना संस्करण लिखना होगा। 

Program for Pure virtual function
#include<iostream> 
using namespace std;
class Vehicle{
public:
    virtual void startEngine() = 0; // Pure virtual function
};
class Car: public Vehicle{
public:
    void startEngine() override {
        cout << "Car is starting." << endl;
    }
};
class Bike: public Vehicle{
public:
    void startEngine() override {
        cout << "Bike is starting." << endl;
    }
};
int main() {
    Car c;
    Bike b;
    c.startEngine(); // Calls Car's startEngine function 
    b.startEngine(); // Calls Bike's startEngine function 
    return 0;
}
Output:
Car is starting.
Bike is starting.

Explanation:
1) Vehicle Class: 
`Vehicle` class के पास एक Pure virtual function `startEngine ()` है जो इस Class को Abstract class बना देता है।

2) Car Class और Bike Class: 
Car class और Bike class दोनो Vehicle class से Inherit किए जाते हैं और उनके Functions `startEngine()`overrides होते है ताकि ये क्रमश "Car is starting" और "Bike is starting" को Print करे।

3) Main Function: 
`main()` function, में `Car` और `Bike` के objects का निर्माण किया जाता है।

4) Function Calls: 
c.startEngine(); Car class के startEngine function को Call करता है तथा b.startEngine(); Bike class के startEngine function को Call करता है।

5) Output
निम्न प्रकार से Output प्राप्त होता हैं।
Car is starting.
Bike is starting. 

 Related Posts

> C++ क्या है? उसके इतिहास, गुण, उपयोग, फायदे और नुकसान 

> Basic structure of C++ Program 

> C++ में Tokens क्या है? और उसके प्रकार

> C++ Variables क्या है?, उसके प्रकार, उसे कैसे Declare, Define करते हैं

> C++ में Constants क्या है? उसके प्रकारों की संपूर्ण जानकारी

> C++ में Basic Input और Output (cin,cout,cerr) की जानकारी

> Data type in C++ की संपूर्ण जानकारी 

> C+ में Operators और उसके प्रकार जानें Practical सहित 

> C++ में Conditional और उसके प्रकारों को जानें Practical सहित 

> C++ में Looping statements और उसके प्रकार Practical सहित 

> C++ में Jump Statements और उसके प्रकारों की संपूर्ण जानकारी Practical सहित

> C++ में Array क्या है? और उसके प्रकारों की जानकारी Practical सहित

> C++ में Function क्या है उसके प्रकार, उपयोग प्रोग्राम सहित 

> C++ में Structure क्या है Practical सहित

> OOPs Concepts in C++ in Hindi- C++ में OOPs के बारे में

> Oops के फायदे और नुकसान की जानकारी 

> OOP और POP के बीच अंतर 

> C++ में Class और Object की सम्पूर्ण जनकारी

> C++ में Array of Objects क्या है? 

> C++ में Pointers, Pointer to an objects, Pointer to an Array की संपूर्ण जानकारी हिंदी में।

C++ में Passing objects क्या है

> C++ में Reference और Type Casting की संपूर्ण जानकारी

> C++ में Access specifier की संपूर्ण जानकारी 

> C++ में Static Data Members और Member Functions के बारे में Practical सहित 

> C++ में Memory allocation और Memory management operators (new और delete) Practical सहित 

> Friend Function in C++ in Hindi 

> Friend Class in C++ in Hindi Practical सहित 

> Inline function in C++ in Hindi 

> Function Overloading in C++ in Hindi Practical सहित 

> Operator Overloading in C++ in Hindi PRACTICAL सहित 

> C++ में Constructor क्या है और उसके प्रकारों की संपूर्ण जानकारी

> C++ में Destructor क्या है ?उसकी संपूर्ण जानकारी

> C++ मे Inheritance क्या है उसके प्रकारों को जानें प्रोग्राम सहित

> C++ में Polymorphism क्या है? और उसके प्रकारों को जानें

> C++ में File handling की संपूर्ण जानकारी 

> C++ में Exception handling  की संपूर्ण जानकारी