Virtual Functions in C++ Notes | Basic Computer Engineering | RGPV BTech First Year
Virtual Functions in C++ Notes | Basic Computer Engineering | RGPV BTech First Year
Virtual Functions in C++
Virtual Function C++ рдХрд╛ рдПрдХ рдЕрддреНрдпрдВрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг Feature рд╣реИ рдЬреЛ Runtime Polymorphism рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред Virtual Function рдХреА рд╕рд╣рд╛рдпрддрд╛ рд╕реЗ Program Execution рдХреЗ рджреМрд░рд╛рди рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреМрди-рд╕рд╛ Function Execute рд╣реЛрдЧрд╛ред рдЗрд╕реЗ Dynamic Binding рдпрд╛ Late Binding рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЬрдм рдХрд┐рд╕реА Base Class Pointer рджреНрд╡рд╛рд░рд╛ Derived Class Object рдХреЛ Refer рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрдм рд╕рд╛рдорд╛рдиреНрдп Function рдХреА рдЕрдкреЗрдХреНрд╖рд╛ Virtual Function рд╡рд╛рд╕реНрддрд╡рд┐рдХ Object рдХреЗ рдЕрдиреБрд╕рд╛рд░ Execute рд╣реЛрддрд╛ рд╣реИред рдпрд╣реА C++ рдХреА Runtime Polymorphism рдХреА рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред
тЖУ
Runtime Polymorphism
тЖУ
Dynamic Binding
Introduction to Virtual Functions
Object Oriented Programming рдореЗрдВ рдХрдИ рдмрд╛рд░ Base Class Pointer рджреНрд╡рд╛рд░рд╛ рд╡рд┐рднрд┐рдиреНрди Derived Class Objects рдХреЛ Handle рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рдпрджрд┐ рд╕рд╛рдорд╛рдиреНрдп Member Functions рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдП, рддреЛ Compiler рдХреЗрд╡рд▓ Pointer рдХреЗ Type рдХреЗ рдЖрдзрд╛рд░ рдкрд░ Function Call рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЕрдкреЗрдХреНрд╖рд┐рдд Output рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддреАред
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди Virtual Functions рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИрдВред Virtual Keyword рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Compiler рдХреЛ рдмрддрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ Function рдХрд╛ рдЪрдпрди Runtime рдкрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ Object рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПред
Definition of Virtual Function
Virtual Function рд╡рд╣ Member Function рд╣реИ рдЬрд┐рд╕реЗ virtual Keyword рдХреЗ рд╕рд╛рде Declare рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ Base Class рдореЗрдВ Declare рд╣реЛрддрд╛ рд╣реИ рддрдерд╛ Derived Class рдореЗрдВ Override рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред Function Call рдХрд╛ рдирд┐рд░реНрдгрдп Runtime рдкрд░ Object рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ Type рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╣реЛрддрд╛ рд╣реИред
Need of Virtual Functions
- Runtime Polymorphism рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
- Dynamic Binding рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
- Base Class Pointer рджреНрд╡рд╛рд░рд╛ Derived Object рдХреЛ Handle рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
- Correct Function Call рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
- Reusable рдПрд╡рдВ Flexible Code рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
- Large Applications рдореЗрдВ Extensibility рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдПред
- Object Oriented Design рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдПред
- Real World Modeling рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдПред
Features of Virtual Functions
- Supports Runtime Polymorphism.
- Uses Dynamic Binding.
- Declared using virtual Keyword.
- Can be Overridden in Derived Class.
- Works with Base Class Pointer.
- Determines Function Call at Runtime.
- Improves Flexibility of Programs.
- Supports Extensible Object-Oriented Design.
Advantages of Virtual Functions
| Advantage | Description |
|---|---|
| Runtime Polymorphism | Execution рдХреЗ рд╕рдордп рд╕рд╣реА Function рдХрд╛ рдЪрдпрди рд╣реЛрддрд╛ рд╣реИред |
| Dynamic Binding | Function Call Runtime рдкрд░ Resolve рд╣реЛрддрд╛ рд╣реИред |
| Code Reusability | Base Class Interface рдХрд╛ рдкреБрдирдГ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред |
| Flexibility | рдирдП Derived Classes рдЖрд╕рд╛рдиреА рд╕реЗ рдЬреЛрдбрд╝реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред |
| Maintainability | Large Applications рдХреЛ Maintain рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред |
Syntax of Virtual Function
Virtual Function Declare рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП virtual Keyword рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ display() рдПрдХ Virtual Function рд╣реИ рдЬрд┐рд╕реЗ Derived Class рдореЗрдВ Override рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
Runtime Polymorphism
Runtime Polymorphism рд╡рд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрд┐рд╕реА Function рдХрд╛ рдЪрдпрди Program Execute рд╣реЛрдиреЗ рдХреЗ рд╕рдордп (Runtime) рд╡рд╛рд╕реНрддрд╡рд┐рдХ Object рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП C++ рдореЗрдВ Virtual Functions рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЬрдм Base Class Pointer рдХрд┐рд╕реА Derived Class Object рдХреЛ Refer рдХрд░рддрд╛ рд╣реИ, рддрдм Virtual Function рд╡рд╛рд╕реНрддрд╡рд┐рдХ Object рдХреЗ рдЕрдиреБрд╕рд╛рд░ Execute рд╣реЛрддрд╛ рд╣реИ, рди рдХрд┐ Pointer рдХреЗ Type рдХреЗ рдЕрдиреБрд╕рд╛рд░ред
Dynamic Binding (Late Binding)
Dynamic Binding рдЕрдерд╡рд╛ Late Binding рд╡рд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ Function Call рдХрд╛ рдирд┐рд░реНрдгрдп Compile Time рдХреЗ рдмрдЬрд╛рдп Runtime рдкрд░ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред Virtual Functions рдЗрд╕реА рд╕рд┐рджреНрдзрд╛рдВрдд рдкрд░ рдХрд╛рд░реНрдп рдХрд░рддреА рд╣реИрдВред
тЖУ
Static Binding
Runtime
тЖУ
Dynamic Binding
Base Class Pointer and Derived Class Object
Virtual Function рдХрд╛ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЙрдкрдпреЛрдЧ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм Base Class рдХрд╛ Pointer Derived Class рдХреЗ Object рдХреЛ Point рдХрд░рддрд╛ рд╣реИред рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ Virtual Function Derived Class рдХрд╛ Overridden Function Execute рдХрд░рддрд╛ рд╣реИред
рдЙрдкрд░реЛрдХреНрдд Program рдореЗрдВ Output "Derived Class" рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧреА рдХреНрдпреЛрдВрдХрд┐ Function Virtual рд╣реИред
Rules of Virtual Functions
- Virtual Function рд╣рдореЗрд╢рд╛ Base Class рдореЗрдВ Declare рдХреА рдЬрд╛рддреА рд╣реИред
- Derived Class рдореЗрдВ рдЗрд╕реЗ Override рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
- Virtual Function Static рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреАред
- Virtual Function Constructors рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗред
- Virtual Function Base Class Pointer рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИред
- Function Call Runtime рдкрд░ Resolve рд╣реЛрддреА рд╣реИред
- Virtual Keyword рдХреЗрд╡рд▓ Base Class рдореЗрдВ рд▓рд┐рдЦрдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред
- Function Signature рд╕рдорд╛рди рд╣реЛрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
Pure Virtual Function
рдпрджрд┐ рдХрд┐рд╕реА Virtual Function рдХрд╛ Base Class рдореЗрдВ рдХреЛрдИ Implementation рди рджреЗрдХрд░ рдЙрд╕реЗ рдХреЗрд╡рд▓ Declaration рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдП, рддреЛ рдЙрд╕реЗ Pure Virtual Function рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ =0 рджреНрд╡рд╛рд░рд╛ Declare рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
Pure Virtual Function Derived Classes рдХреЛ Function рдХрд╛ рд╕реНрд╡рдпрдВ Implementation рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд░рддреА рд╣реИред
Abstract Class
рдЬрд┐рд╕ Class рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдПрдХ Pure Virtual Function рд╣реЛрддреА рд╣реИ, рдЙрд╕реЗ Abstract Class рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕реА Class рдХрд╛ Object Create рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛, рдмрд▓реНрдХрд┐ рдХреЗрд╡рд▓ Derived Class рдмрдирд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИред
| Abstract Class | Normal Class |
|---|---|
| Contains Pure Virtual Function. | May or may not contain Virtual Functions. |
| Object Create рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ред | Object Create рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред |
| Base Interface рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рд╣реЛрддреА рд╣реИред | рд╕рд╛рдорд╛рдиреНрдп Class рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рд╣реЛрддреА рд╣реИред |
Virtual Destructor
рдпрджрд┐ Base Class рдХреЛ Pointer рджреНрд╡рд╛рд░рд╛ Delete рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реЛ, рддреЛ Destructor рдХреЛ Virtual Destructor рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ Derived Class рдХрд╛ Destructor рддрдерд╛ рдЙрд╕рдХреЗ рдмрд╛рдж Base Class рдХрд╛ Destructor Execute рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ Memory Leak рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреА рд╣реИред
Function Overriding using Virtual Function
Virtual Function рдХрд╛ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢реНрдп Function Overriding рдХреЛ Runtime рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИред рдЬрдм Derived Class, Base Class рдХреА Virtual Function рдХреЛ Override рдХрд░рддреА рд╣реИ, рддрдм Base Class Pointer рджреНрд╡рд╛рд░рд╛ рднреА Derived Class рдХрд╛ Function Execute рд╣реЛрддрд╛ рд╣реИред
Complete Program using Virtual Function
Real Life Applications of Virtual Functions
| Application | Description |
|---|---|
| Game Development | Characters рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ Behaviors Runtime рдкрд░ Execute рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред |
| Graphics Software | Different Shapes рдХреЗ Draw Function рдХреЛ Dynamically Call рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред |
| Banking Systems | Account Types рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ Operations Execute рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред |
| Hospital Management | Different Patient Types рдХреЗ рдЕрдиреБрд╕рд╛рд░ Processing рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред |
| Enterprise Applications | Extensible Object-Oriented Architecture рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред |
Advantages of Virtual Functions
- Runtime Polymorphism рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИрдВред
- Dynamic Binding рдХреЛ Support рдХрд░рддреА рд╣реИрдВред
- Code Reusability рдмрдврд╝рд╛рддреА рд╣реИрдВред
- Function Overriding рдХреЛ рдкреНрд░рднрд╛рд╡реА рдмрдирд╛рддреА рд╣реИрдВред
- Large Software Projects рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИрдВред
- Extensible Object-Oriented Design рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрддреА рд╣реИрдВред
- Maintenance рдПрд╡рдВ Scalability рдЖрд╕рд╛рди рдмрдирд╛рддреА рд╣реИрдВред
- Real World Modeling рдХреЛ рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡реА рдмрдирд╛рддреА рд╣реИрдВред
Limitations of Virtual Functions
- Memory Overhead рдмрдврд╝рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ Virtual Table (vtable) рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИред
- Runtime рдкрд░ Function Resolution рд╣реЛрдиреЗ рд╕реЗ рд╣рд▓реНрдХрд╛ Performance Overhead рд╣реЛрддрд╛ рд╣реИред
- Beginners рдХреЗ рд▓рд┐рдП рд╕рдордЭрдирд╛ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдХрдард┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
- Virtual Functions рдХрд╛ рдЕрддреНрдпрдзрд┐рдХ рдЙрдкрдпреЛрдЧ Program Design рдХреЛ Complex рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред
- Constructor рдХреЛ Virtual Declare рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ред
Difference between Virtual Function and Normal Function
| Virtual Function | Normal Function |
|---|---|
| Runtime Binding рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред | Compile Time Binding рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред |
| Runtime Polymorphism рдХреЛ Support рдХрд░рддреА рд╣реИред | Runtime Polymorphism рдХреЛ Support рдирд╣реАрдВ рдХрд░рддреАред |
| Base Pointer рджреНрд╡рд╛рд░рд╛ Derived Function Execute рд╣реЛ рд╕рдХрддрд╛ рд╣реИред | Base Pointer рдХреЗрд╡рд▓ Base Function Execute рдХрд░рддрд╛ рд╣реИред |
| virtual Keyword рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИред | virtual Keyword рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реЛрддрд╛ред |
Viva Questions
- What is a Virtual Function?
- Why are Virtual Functions used in C++?
- Explain Runtime Polymorphism.
- What is Dynamic Binding?
- What is Function Overriding?
- Explain Pure Virtual Function.
- What is an Abstract Class?
- What is a Virtual Destructor?
- Differentiate between Virtual Function and Normal Function.
- State the advantages of Virtual Functions.
Exam Oriented Important Questions
- Define Virtual Function with suitable example.
- Explain Runtime Polymorphism with C++ Program.
- Discuss Dynamic Binding and Late Binding.
- Explain Base Class Pointer and Derived Class Object.
- Write a Program using Virtual Function.
- Explain Pure Virtual Function and Abstract Class.
- What is a Virtual Destructor? Explain with example.
- Discuss the advantages and limitations of Virtual Functions.
- Differentiate between Virtual Function and Normal Function.
- Explain Function Overriding using Virtual Function.
Conclusion
Virtual Function C++ рдХрд╛ рдПрдХ рдЕрддреНрдпрдВрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг Object Oriented Programming Feature рд╣реИ рдЬреЛ Runtime Polymorphism рдПрд╡рдВ Dynamic Binding рдХреЛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ Base Class Pointer рд╡рд╛рд╕реНрддрд╡рд┐рдХ Derived Class Function рдХреЛ Execute рдХрд░ рд╕рдХрддрд╛ рд╣реИред Pure Virtual Function, Abstract Class рддрдерд╛ Virtual Destructor рдЬреИрд╕реЗ Concepts рдЖрдзреБрдирд┐рдХ Software Development рдореЗрдВ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред RGPV B.Tech рд╡рд┐рджреНрдпрд╛рд░реНрдерд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ Topic Practical, Viva рддрдерд╛ University Examination рдХреА рджреГрд╖реНрдЯрд┐ рд╕реЗ рдЕрддреНрдпрдВрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред
Related Articles
Arrays in C++ Notes | One Dimensional & Two Dimensional Arrays with Programs | Basic Computer Engineering | RGPV BTech First Year
Arrays ...
Read More тЖТControl Statements in C++ Notes | Decision Making & Looping Statements | Basic Computer Engineering | RGPV BTech First Year
Control...
Read More тЖТExpressions in C++ Notes | Types of Expressions, Evaluation & Expression Statements | Basic Computer Engineering | RGPV BTech First Year
Express...
Read More тЖТOperators in C++ Notes | Arithmetic, Relational, Logical, Assignment, Bitwise Operators | Basic Computer Engineering | RGPV BTech First Year
Operato...
Read More тЖТProgram Structure in C++ Notes | Basic Computer Engineering | RGPV BTech First Year
Program...
Read More тЖТ