Virtual Functions & Polymorphism in C++ Notes | Virtual Function, Pure Virtual Function, Runtime Polymorphism & Abstract Class | Basic Computer Engineering | RGPV BTech First Year
Virtual Functions & Polymorphism in C++ Notes | Virtual Function, Pure Virtual Function, Runtime Polymorphism & Abstract Class | Basic Computer Engineering | RGPV BTech First Year
Virtual Functions & Polymorphism in C++
Polymorphism Object Oriented Programming (OOP) का एक अत्यंत महत्वपूर्ण Feature है। Polymorphism का अर्थ है "One Interface, Multiple Forms" अर्थात एक ही Function अथवा Interface विभिन्न परिस्थितियों में अलग-अलग प्रकार से कार्य कर सकता है। इससे Program अधिक Flexible, Reusable तथा Maintainable बनता है।
C++ में Polymorphism मुख्य रूप से दो प्रकार का होता है — Compile Time Polymorphism तथा Runtime Polymorphism। Runtime Polymorphism को प्राप्त करने के लिए Virtual Function का उपयोग किया जाता है। Virtual Function Dynamic Binding द्वारा Program को Runtime पर सही Function Execute करने की सुविधा देता है।
RGPV B.Tech First Year के Basic Computer Engineering Subject में Virtual Functions & Polymorphism in C++ अत्यंत महत्वपूर्ण Topic है। University Examination, Practical तथा Viva में Virtual Function, Runtime Polymorphism, Pure Virtual Function तथा Abstract Class से संबंधित प्रश्न नियमित रूप से पूछे जाते हैं।
↓
Virtual Function
↓
Derived Class
↓
Runtime Polymorphism
Introduction to Polymorphism
Object Oriented Programming में कई बार एक ही Operation को विभिन्न Objects पर अलग-अलग तरीके से Execute करना आवश्यक होता है। यदि प्रत्येक Object के लिए अलग-अलग Interface बनाया जाए, तो Program Complex हो जाएगा। इस समस्या का समाधान Polymorphism द्वारा किया जाता है।
Polymorphism Program को इस प्रकार विकसित करने की सुविधा देता है कि एक ही Function विभिन्न Objects के अनुसार अलग-अलग व्यवहार (Behavior) प्रदर्शित कर सके।
What is Polymorphism?
Polymorphism शब्द दो Greek Words Poly तथा Morphism से मिलकर बना है। Poly का अर्थ है Many तथा Morphism का अर्थ है Forms। इसलिए Polymorphism का अर्थ होता है "Many Forms" अर्थात एक Interface के अनेक रूप।
उदाहरण के लिए draw() Function Circle, Rectangle तथा Triangle के लिए अलग-अलग प्रकार से कार्य कर सकता है।
Need of Polymorphism
Large Software Projects में विभिन्न Objects के लिए समान Interface का उपयोग करना आवश्यक होता है। Polymorphism Programmer को यही सुविधा प्रदान करता है।
- Code Reusability बढ़ाने के लिए।
- Flexible Software Design विकसित करने के लिए।
- Object Oriented Programming को प्रभावी बनाने के लिए।
- Dynamic Behavior प्राप्त करने के लिए।
- Large Applications को Maintain करना आसान बनाने के लिए।
- Code Duplication कम करने के लिए।
- Professional Software Development के लिए।
Advantages of Polymorphism
| Advantage | Description |
|---|---|
| Code Reusability | एक ही Interface कई Objects के लिए उपयोग किया जा सकता है। |
| Flexibility | Program अधिक Flexible बनता है। |
| Easy Maintenance | Code को Maintain एवं Update करना आसान होता है। |
| Extensibility | नए Classes जोड़ना आसान हो जाता है। |
| Dynamic Behavior | Runtime पर उचित Function Execute होता है। |
Types of Polymorphism
C++ में Polymorphism मुख्य रूप से दो प्रकार का होता है। पहला Compile Time Polymorphism जो Compile Time पर Resolve होता है तथा दूसरा Runtime Polymorphism जो Program के Execution के समय Resolve होता है।
| Type | Description |
|---|---|
| Compile Time Polymorphism | Compiler Compile Time पर उचित Function का चयन करता है। |
| Runtime Polymorphism | Program Execute होने के समय उचित Function का चयन किया जाता है। |
Compile Time Polymorphism
Compile Time Polymorphism को Static Binding अथवा Early Binding भी कहा जाता है। इसमें Compiler Program Compile करते समय ही यह निर्धारित कर देता है कि कौन-सा Function Execute होगा।
Compile Time Polymorphism मुख्यतः Function Overloading तथा Operator Overloading द्वारा प्राप्त किया जाता है।
Runtime Polymorphism
Runtime Polymorphism को Dynamic Binding अथवा Late Binding भी कहा जाता है। इसमें Program यह निर्णय Runtime पर लेता है कि कौन-सा Function Execute किया जाएगा।
Runtime Polymorphism प्राप्त करने के लिए C++ में Virtual Function तथा Inheritance का उपयोग किया जाता है।
↓
Virtual Function
↓
Derived Object
↓
Runtime Decision
Virtual Function
Virtual Function ऐसा Member Function होता है जिसे Base Class में virtual Keyword द्वारा Declare किया जाता है। जब Derived Class उसी Function को Override करती है, तब Base Class Pointer द्वारा Call करने पर Runtime में Derived Class का Function Execute होता है।
Virtual Function Runtime Polymorphism प्राप्त करने का सबसे महत्वपूर्ण माध्यम है।
Syntax of Virtual Function
ऊपर दिए गए उदाहरण में display() एक Virtual Function है।
Characteristics of Virtual Function
- Virtual Function को virtual Keyword द्वारा Declare किया जाता है।
- यह केवल Member Function हो सकता है।
- Runtime Polymorphism प्राप्त करने के लिए उपयोग किया जाता है।
- Inheritance के साथ कार्य करता है।
- Base Class Pointer द्वारा Derived Class Function Execute कराया जा सकता है।
- Dynamic Binding को Support करता है।
- Program को अधिक Flexible एवं Extensible बनाता है।
Example of Virtual Function
Virtual Function का वास्तविक उपयोग तब समझ में आता है जब Base Class Pointer द्वारा Derived Class Object को Refer किया जाता है। यदि Function को virtual घोषित किया गया है, तो Runtime पर Derived Class का Function Execute होता है।
Output
ऊपर दिए गए Program में Pointer का Type Base है, लेकिन Pointer Derived Object को Refer कर रहा है। क्योंकि display() Virtual Function है, इसलिए Runtime पर Derived Class का Function Execute होता है।
Rules of Virtual Function
- Virtual Function केवल Class का Member Function हो सकता है।
- इसे Base Class में virtual Keyword द्वारा Declare किया जाता है।
- Derived Class इसे Override कर सकती है।
- Virtual Function को सामान्यतः Base Class Pointer अथवा Reference द्वारा Call किया जाता है।
- Constructors को Virtual घोषित नहीं किया जा सकता।
- Destructor को Virtual बनाया जा सकता है।
- Virtual Function Runtime Polymorphism को Support करता है।
Dynamic Binding
Dynamic Binding वह प्रक्रिया है जिसमें Function Call का निर्णय Program के Runtime पर लिया जाता है। Virtual Function Dynamic Binding का उपयोग करता है, इसलिए सही Function का चयन Object के वास्तविक Type के अनुसार होता है।
↓
Virtual Function
↓
Runtime
↓
Derived Function
Dynamic Binding के कारण Program अधिक Flexible तथा Extensible बन जाता है।
Late Binding
Late Binding Dynamic Binding का ही दूसरा नाम है। इसमें Function का चयन Compile Time पर नहीं बल्कि Runtime पर किया जाता है। Virtual Functions इसी Principle पर कार्य करते हैं।
| Early Binding | Late Binding |
|---|---|
| Compile Time पर Function Selection होता है। | Runtime पर Function Selection होता है। |
| Static Binding कहलाता है। | Dynamic Binding कहलाता है। |
| Virtual Function का उपयोग नहीं होता। | Virtual Function का उपयोग किया जाता है। |
| Execution अपेक्षाकृत तेज़ होता है। | थोड़ा अतिरिक्त Runtime Overhead होता है। |
Advantages of Virtual Function
- Runtime Polymorphism प्राप्त होता है।
- Dynamic Binding को Support करता है।
- Code Reusability बढ़ती है।
- Program अधिक Flexible एवं Extensible बनता है।
- Base Class Interface द्वारा अनेक Derived Classes को Handle किया जा सकता है।
- Large Object Oriented Applications के लिए अत्यंत उपयोगी है।
Pure Virtual Function
Pure Virtual Function ऐसा Virtual Function होता है जिसका Base Class में कोई Implementation नहीं होता। इसे केवल Declare किया जाता है तथा इसका वास्तविक Implementation Derived Class में किया जाता है। Pure Virtual Function का उपयोग Abstract Class बनाने के लिए किया जाता है।
ऊपर दिए गए Statement में = 0 यह दर्शाता है कि यह एक Pure Virtual Function है।
Characteristics of Pure Virtual Function
- इसे virtual Keyword द्वारा Declare किया जाता है।
- Declaration के अंत में = 0 लिखा जाता है।
- Base Class में इसका कोई Implementation नहीं होता।
- Derived Class को इसे Override करना आवश्यक होता है।
- Abstract Class बनाने के लिए उपयोग किया जाता है।
- Runtime Polymorphism को Support करता है।
Abstract Class
यदि किसी Class में कम से कम एक Pure Virtual Function होता है, तो वह Abstract Class कहलाती है। Abstract Class का Object Create नहीं किया जा सकता। इसका उपयोग केवल Base Class के रूप में किया जाता है।
ऊपर दिए गए उदाहरण में Shape एक Abstract Class है क्योंकि इसमें Pure Virtual Function उपस्थित है।
Example of Abstract Class
Output
इस उदाहरण में Shape एक Abstract Class है तथा Circle Class ने draw() Function को Override किया है।
Virtual Function vs Normal Function
| Virtual Function | Normal Function |
|---|---|
| Runtime Binding का उपयोग करता है। | Compile Time Binding का उपयोग करता है। |
| Runtime Polymorphism प्राप्त करता है। | Runtime Polymorphism उपलब्ध नहीं होती। |
| Base Class Pointer द्वारा Derived Function Call किया जा सकता है। | Base Class Function ही Execute होता है। |
| Dynamic Binding होती है। | Static Binding होती है। |
| थोड़ा Runtime Overhead होता है। | Execution अपेक्षाकृत तेज़ होता है। |
Advantages of Pure Virtual Function and Abstract Class
- Common Interface प्रदान करते हैं।
- Runtime Polymorphism को प्रभावी बनाते हैं।
- Derived Classes को आवश्यक Functions Implement करने के लिए बाध्य करते हैं।
- Code Reusability एवं Maintainability बढ़ाते हैं।
- Large Object Oriented Applications में Design को बेहतर बनाते हैं।
- Professional Software Architecture विकसित करने में सहायक होते हैं।
Applications of Virtual Functions & Polymorphism
Virtual Functions तथा Runtime Polymorphism का उपयोग आधुनिक Object Oriented Software Development में व्यापक रूप से किया जाता है। इनकी सहायता से एक Common Interface द्वारा विभिन्न Objects को Handle किया जा सकता है। इससे Program अधिक Flexible, Extensible तथा Maintainable बनता है।
| Application | Purpose |
|---|---|
| Graphics Software | Circle, Rectangle, Triangle आदि Shapes को समान Interface द्वारा Draw करना। |
| Game Development | Different Characters एवं Objects के अलग-अलग Behaviors Implement करना। |
| Database Applications | विभिन्न Database Objects को Common Interface द्वारा Manage करना। |
| GUI Applications | Buttons, TextBox तथा Menu Controls के अलग-अलग Behaviors Implement करना। |
| Simulation Software | Real World Objects का Dynamic Behavior प्रदर्शित करना। |
| Enterprise Applications | Business Objects के लिए Extensible Architecture विकसित करना। |
Advantages of Virtual Functions
- Runtime Polymorphism प्राप्त होती है।
- Dynamic Binding को Support करता है।
- Code Reusability बढ़ाता है।
- Program अधिक Flexible एवं Extensible बनता है।
- Base Class Interface द्वारा अनेक Derived Classes को Handle किया जा सकता है।
- Software Design अधिक Modular बनता है।
- Large Object Oriented Applications के लिए अत्यंत उपयोगी है।
- Future Expansion करना आसान हो जाता है।
Limitations of Virtual Functions
- Virtual Function Call में थोड़ा Runtime Overhead होता है।
- Memory में Virtual Table (vtable) के कारण अतिरिक्त स्थान उपयोग हो सकता है।
- Program का Execution Normal Function की तुलना में थोड़ा धीमा हो सकता है।
- Complex Class Hierarchy में Debugging कठिन हो सकती है।
- Constructors को Virtual नहीं बनाया जा सकता।
- Virtual Functions का अत्यधिक उपयोग Program की Complexity बढ़ा सकता है।
Best Practices for Virtual Functions
- केवल आवश्यक Member Functions को ही Virtual घोषित करें।
- Base Class Destructor को Virtual बनाना एक अच्छी Practice मानी जाती है।
- Abstract Class का उपयोग Common Interface प्रदान करने के लिए करें।
- Derived Classes में Virtual Functions को सही प्रकार से Override करें।
- जहाँ Runtime Polymorphism की आवश्यकता न हो, वहाँ Normal Functions का उपयोग करें।
- Class Design को सरल एवं Maintainable बनाए रखें।
- Dynamic Binding का उपयोग केवल आवश्यक स्थानों पर करें।
Real Life Example
मान लीजिए किसी Drawing Software में Shape एक Base Class है तथा Circle, Rectangle और Triangle उसकी Derived Classes हैं। सभी Classes में draw() Function उपलब्ध है। Base Class Pointer द्वारा किसी भी Shape Object को Refer किया जा सकता है और Runtime पर संबंधित Object का draw() Function Execute होता है। यही Runtime Polymorphism का वास्तविक उपयोग है।
Working of Runtime Polymorphism
↓
Virtual Function
↓
Derived Object
↓
Dynamic Binding
↓
Correct Function Executes
Summary
Virtual Functions & Polymorphism Object Oriented Programming (OOP) के सबसे महत्वपूर्ण Concepts में से एक हैं। Polymorphism का अर्थ है "One Interface, Multiple Forms", जिससे एक ही Interface विभिन्न Objects के लिए अलग-अलग प्रकार से कार्य करता है। C++ में Compile Time Polymorphism तथा Runtime Polymorphism दोनों उपलब्ध हैं। Runtime Polymorphism प्राप्त करने के लिए Virtual Function, Dynamic Binding, Pure Virtual Function तथा Abstract Class का उपयोग किया जाता है।
| Concept | Description |
|---|---|
| Polymorphism | एक Interface के अनेक Forms में कार्य करने की क्षमता। |
| Compile Time Polymorphism | Function Selection Compile Time पर होता है। |
| Runtime Polymorphism | Function Selection Runtime पर होता है। |
| Virtual Function | Runtime Polymorphism प्राप्त करने वाला Member Function। |
| Dynamic Binding | Runtime पर Function Call का निर्णय लेना। |
| Late Binding | Dynamic Binding का दूसरा नाम। |
| Pure Virtual Function | Implementation रहित Virtual Function जिसे =0 द्वारा Declare किया जाता है। |
| Abstract Class | जिस Class में कम से कम एक Pure Virtual Function हो। |
Important Viva Questions
- Polymorphism क्या है?
- Compile Time एवं Runtime Polymorphism में क्या अंतर है?
- Virtual Function क्या है?
- Virtual Function का Syntax लिखिए।
- Dynamic Binding क्या है?
- Late Binding क्या है?
- Pure Virtual Function क्या है?
- Abstract Class क्या होती है?
- Virtual Function तथा Normal Function में क्या अंतर है?
- Virtual Functions के मुख्य Advantages क्या हैं?
University Examination Important Questions
- Polymorphism क्या है? इसके प्रकारों को समझाइए।
- Compile Time तथा Runtime Polymorphism में अंतर लिखिए।
- Virtual Function को उदाहरण सहित समझाइए।
- Dynamic Binding तथा Late Binding को उदाहरण सहित समझाइए।
- Pure Virtual Function क्या है? इसका Syntax लिखिए।
- Abstract Class क्या होती है? उदाहरण सहित समझाइए।
- Virtual Function एवं Normal Function में अंतर लिखिए।
- Runtime Polymorphism की कार्यप्रणाली Diagram सहित समझाइए।
- Virtual Functions के Applications, Advantages तथा Limitations लिखिए।
- Object Oriented Programming में Polymorphism की भूमिका स्पष्ट कीजिए।
Exam Tips
- हमेशा याद रखें कि Polymorphism का अर्थ One Interface, Multiple Forms होता है।
- Compile Time Polymorphism में Function Selection Compile Time पर तथा Runtime Polymorphism में Runtime पर होता है।
- Virtual Function हमेशा Base Class में virtual Keyword द्वारा Declare किया जाता है।
- Pure Virtual Function को = 0 द्वारा Declare किया जाता है।
- जिस Class में कम से कम एक Pure Virtual Function हो, उसे Abstract Class कहते हैं।
- Dynamic Binding तथा Late Binding एक ही Concept के दो नाम हैं।
- RGPV Exam में Virtual Function का Program तथा Abstract Class का Example अक्सर पूछा जाता है।
Conclusion
Virtual Functions & Polymorphism C++ की Object Oriented Programming का अत्यंत महत्वपूर्ण भाग हैं। इनकी सहायता से Program अधिक Flexible, Reusable तथा Extensible बनता है। Virtual Function Runtime पर उचित Function Execute करने की सुविधा प्रदान करता है, जबकि Pure Virtual Function एवं Abstract Class Common Interface तैयार करने में सहायता करते हैं। Dynamic Binding के कारण Base Class Pointer द्वारा विभिन्न Derived Objects को Efficient तरीके से Handle किया जा सकता है। Graphics Software, GUI Applications, Game Development, Database Systems तथा Enterprise Applications में Virtual Functions एवं Runtime Polymorphism का व्यापक उपयोग किया जाता है। RGPV B.Tech First Year के विद्यार्थियों के लिए यह Topic Theory, Practical तथा Viva तीनों दृष्टिकोण से अत्यंत महत्वपूर्ण है।
Related Articles
Arrays of Objects in C++ Notes | Object Array, Declaration, Initialization & Examples | Basic Computer Engineering | RGPV BTech First Year
Arrays ...
Read More →Object as Function Argument & Returning Object from Function in C++ Notes | Pass Object to Function, Return Object & Examples | Basic Computer Engineering | RGPV BTech First Year
Object ...
Read More →Pointers to Objects in C++ Notes | Object Pointer, Accessing Members using Pointer & Examples | Basic Computer Engineering | RGPV BTech First Year
Pointer...
Read More →Dynamic Memory Allocation in C++ Notes | new & delete Operators, Heap Memory, Dynamic Objects & Examples | Basic Computer Engineering | RGPV BTech First Year
Dynamic...
Read More →this Pointer in C++ Notes | this Keyword, Uses, Advantages & Examples | Basic Computer Engineering | RGPV BTech First Year
this Po...
Read More →