Introduction to C++ virtual functions
Views
Introduction to C++ virtual functions
C++ आपको polymorphism की capability provide करती है। Polymorphism का मतलब एक interface से कई तरह के अलग अलग codes को execute करना होता है। जैसा की function overloading और constructor overloading में आप करते है।
Function overloading में आप एक ही नाम के function को अलग अलग data types के साथ create करते है। इसके बाद function को call करवाते समय user जिस तरह का data type pass करते है उसके अनुसार function की appropriate definition execute हो जाती है।
इसे run-time polymorphism कहा जाता है। क्योंकि इसमें run time पर decide किया जाता है की function की कौनसी definition execute होगी।
उसी प्रकार pointers के माध्यम से भी आप polymorphism achieve कर सकते है। सिर्फ base class के pointer से ही आप दोनों classes के functions को execute करवा सकते है। ऐसा virtual functions के माध्यम से किया जाता है। Virtual functions के बारे में और अधिक जानने से पहले आपको ये जानने की जरुरत है की virtual functions की जरुरत क्यों पड़ी। इसे निचे एक उदाहरण के माध्यम से समझाया जा रहा है।
उदाहरण के लिए मान लीजिये आपने एक class create की है जिसका नाम color है। इस class में आपने display() नाम से एक function भी create किया हुआ है।
class Color
{
public:
void display()
{
cout<<"Red Green Blue";
}
};
Color class को एक दूसरी class inherit करती है जिसका नाम RedColor है। इस class में भी एक display() नाम का function create किया गया है।
class RedColor : public Color
{
public:
void display()
{
cout<<"Red";
}
};
मान लीजिये आप main() function में base class का एक pointer create करते है। सबसे पहले आप इस pointer को base class object assign करते है और फिर pointer के माध्यम से base class का display() function call करते है। जब आप ऐसा करते है तो display() function "Red Green Blue" print करता है।
int main()
{
Color *basepntr; //base class pointer
color baseobj; //base class object
RedColor derivedObj //derived class object
basepntr = &baseobj; //assigning base class obj to base class pointer
basepntr->display(); //executing base class display() function
basepntr=&derivedObj; // assigning derived class obj to base class pointer
basepntr->display(); //Will still execute base class display() function
return 0;
}
इसके बाद आप derived class का object create करते है और इसे base class के pointer को assign करते है। अब आप वापस base class के pointer के द्वारा display() function को call करते है। जब आप ऐसा करते है तो वापस base class का ही display() function execute होता है। और "Red Green Blue" output show होता है।
लेकिन क्योंकि यँहा पर derived class का object pointer को assign किया गया है तो derived class का display() function execute होना चाहिए, पर ऐसा नहीं होता है। इसका main कारण ये है की pointer उसी type के functions को execute कर रहा है जिस type का वह खुद है।
यानी की ऊपर दिए गए उदाहरण में base class का pointer create किया गया है, इसलिए वह pointer सिर्फ base class के function को ही execute कर रहा है। ऐसी situation में C++ polymorphism feature work नहीं कर रहा है।
इस situation में polymorphism achieve करने एक लिए C++ आपको एक mechanism provide करती है जिसे virtual function कहते है। Virtual functions को virtual keywords से create किया जाता है। Virtual functions सिर्फ base class में ही create किये जाते है। Virtual functions compiler को बताते है की same नाम का function derived class में भी create किया गया है। इसलिए यदि object derived class का है तो function भी derived class का ही execute किया जायेगा।