जब हम कोई function एक ही नाम को दोनों Class, Base तथा derived में प्रयोग करते हैं तब base class का function virtual घोषित किया जाता हैं। Virtual घोषणा हेतु Virtual Keyword का प्रयोग करते हैं1
हमें Virtual Keyword का प्रयोग base class में घोषित किये गये Pointer का प्रयोग करके करना चाहिए। Runtime Polymorphism केवल तभी किया जा सकता हैं, जब virtual function base class के pointer के द्वारा Access किया जाता हैं।
Rules Of Virtual Function
मुख्य नियम Compiler के अनुसार निम्न हैं –
- Virtual Function आवश्यक रूप से किसी Class का सदस्य हो।
- इन्हें Static Members नहीं होना चाहिये।
- वे Object Pointer का प्रयोग कर Access किये जाये।
- Base class में ही virtual function को declare करना चाहिये।
- Virtual function दूसरे class का मित्र (Friend) हो सकता हैं।
- Virtual Function के नाम तथा prototype दोनों ही class में एक जैसे होने चाहिये अन्यथा compiler इसे overload समझकर छोड़ देगा।
- यदि एक Virtual function base class में परिभाषित हैं तो इसे derived class में परिभाषित करने की आवश्यकता नहीं हैं। इस स्थिति में call base function को execute कर देता हैं।
Example
class Base
{
Private :
Int x:
Public:
virtual void show ()
{
cout<<“Hello I am Basic”<<endl;
}
};
class revived:Public Base
{
int a;
Public:
void show()
{
cout<<“Hello I am derived”<<endl;
}
};
void main()
{
clrscr();
Base B;
Base *ptr;
Ptr = & B;
Ptr->show();
Derived D;
Ptr = &D;
Ptr->show()
}
Pure Virtual Function
Base class के अन्दर function शायद ही किसी कार्य को सम्पन्न करते हैं। यह केवल इसमें जगह छेकतें हैं अथवा इन्हें हम कुछ न करने वाला function आम बोल-चाल की भाषा में कहते हैं। इसे निम्न प्रकार define करते हैं –
virtual Void Display () = 0;
ऐसे Function शुद्ध virtual function कहलाते हैं। pure virtual function वह हैं जो base class में घोषित तो किया जाता हैं किन्तु base-class से उसका कोई सम्बन्ध नहीं होता हैं। ऐसी स्थिति में Compiler derived class में इसे पुन: परिभाषित करने का निर्देश देता हैं या फिर इसे pure virtual function के रूप में परिभाषित कर दिया जाता हैं।