Virtual Functions in c++
C++ зuat polymorphism at capability provide करती है। Polymorphism का मतलब एक interface से कई तरह के अलग अलग codes को execute करना होता है। जैसा की function overloading it constructor overloading आप करते है।
Function overloading में आप एक ही नाम के function को अलग अलग data types के साथ create करते है। इसके बाद function को call करवाते समय user जिस तरह का data type pas करते है उसके अनुसार 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 भी creat किया हुआ है।
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 at display() function call and है। जब आप ऐसा करते है तो 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 creat करते है और इसे base class के pointer को assign करते है। अब आप वापस base class के pointer RT
display() function at call करते है। जब आप ऐसा करते है तो वापस base class display() function execute a है। और "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 कहते I Virtual functions at virtual keywords create किया जाता है। Virtual functions सिर्फ base class में ही create किये जाते है। Virtual functions compiler को बताते है की same नाम का function derived class में भी create किया गया है। इसलिए यदि object derived class का है at function ft derived class execute
किया जायेगा।