सी++ फंक्शन ओवरराइडिंग

C Function Overriding



इस लेख में, हम C++ प्रोग्रामिंग लैंग्वेज में फंक्शन ओवरराइडिंग को कवर करेंगे। सी ++ रनटाइम बहुरूपता का समर्थन करता है।

फ़ंक्शन ओवरराइडिंग में, चाइल्ड क्लास उस फ़ंक्शन को फिर से परिभाषित करता है जो पहले से ही उसके मूल वर्ग में परिभाषित है।







यह प्रोग्रामर को व्युत्पन्न वर्ग-विशिष्ट कार्यक्षमता प्रदान करने में सक्षम बनाता है (भले ही इसे बेस क्लास में परिभाषित किया गया हो)।



अब, हम कुछ उदाहरण देखेंगे और C++ में फंक्शन ओवरराइडिंग कॉन्सेप्ट को समझेंगे।



उदाहरण 1

मैंने नीचे दिए गए उदाहरण कोड में दो वर्गों को परिभाषित किया है - एक आधार वर्ग और एक व्युत्पन्न वर्ग। बेस क्लास में एक मेंबर फंक्शन होता है, यानी, डिस्प ()। Derived_Class को Base_Class से इनहेरिट किया गया है। डिस्प () फ़ंक्शन बेस_क्लास में मौजूद है और फिर Derived_Class में फिर से परिभाषित किया गया है।





मुख्य () फ़ंक्शन में, Derived_Class का एक ऑब्जेक्ट, यानी, d, बनाया जाता है। फिर, हम व्युत्पन्न क्लास ऑब्जेक्ट पर डिस्प () फ़ंक्शन को कॉल करते हैं, इसलिए व्युत्पन्न वर्ग में फ़ंक्शन को लागू किया जाएगा। बेस क्लास संस्करण को यहां अनदेखा किया गया है। आप आउटपुट के नीचे व्युत्पन्न वर्ग में - disp () फ़ंक्शन के रूप में देख सकते हैं।

#शामिल

नेमस्पेस एसटीडी का उपयोग करना;

// बेस क्लास
क्लास बेस_क्लास
{
सह लोक:
शून्यलाभ लेना()
{
लागत<< बेस क्लास में 'डिस्प () फंक्शन।' <<एंडली;
}

};

// व्युत्पन्न वर्ग
वर्ग Derived_Class:सार्वजनिक बेस_क्लास
{
सह लोक:
शून्यलाभ लेना()
{
लागत<< 'डिस्प () व्युत्पन्न वर्ग में समारोह' <<एंडली;
}
};

NSमुख्य()
{
Derived_Class d;
डी।लाभ लेना(); // disp () व्युत्पन्न वर्ग वस्तु पर कार्य करता है
वापसी 0;
}



उदाहरण-2

इस उदाहरण में, हम देखेंगे कि व्युत्पन्न वर्ग ऑब्जेक्ट के माध्यम से फ़ंक्शन के बेस क्लास संस्करण को जानबूझकर कैसे कॉल किया जाए। व्युत्पन्न वर्ग फ़ंक्शन परिभाषा में, हम फ़ंक्शन के बेस क्लास संस्करण को कॉल करने के लिए स्कोप रिज़ॉल्यूशन ऑपरेटर [::] का उपयोग करते हैं।

#शामिल

नेमस्पेस एसटीडी का उपयोग करना;

क्लास बेस_क्लास
{
सह लोक:
शून्यलाभ लेना()
{
लागत<< बेस क्लास में 'डिस्प () फंक्शन।' <<एंडली;
}

};

वर्ग Derived_Class:सार्वजनिक बेस_क्लास
{
सह लोक:
शून्यलाभ लेना()
{
बेस_क्लास::लाभ लेना(); // डिस्प के बेस क्लास वर्जन को कॉल करें ()
}
};

NSमुख्य()
{
Derived_Class d;
डी।लाभ लेना();
वापसी 0;
}

उदाहरण-3

यह फ़ंक्शन ओवरराइडिंग का एक और उदाहरण है। इस उदाहरण में, हमने एक मूल वर्ग बनाया है - पशु और दो व्युत्पन्न वर्ग - बतख और कुत्ता। बेस क्लास, यानी एनिमल क्लास, में एक मेंबर फंक्शन साउंड () होता है।

व्युत्पन्न वर्ग/बाल वर्ग, यानी डॉग में, हमने उसी फ़ंक्शन को फिर से परिभाषित किया है, यानी ध्वनि (), इसकी बेस क्लास परिभाषा को ओवरराइड करने के लिए। इसी तरह, अन्य व्युत्पन्न वर्ग, यानी डक में, हमने उसी फ़ंक्शन को फिर से परिभाषित किया है, यानी ध्वनि ()।

मुख्य () फ़ंक्शन में, हमने डॉग का डॉग ऑब्जेक्ट और डक ऑफ़ डक बनाया है। तो, अब जब हम कुत्ते और बत्तख के लिए ध्वनि () फ़ंक्शन को कॉल करते हैं, तो ध्वनि () फ़ंक्शन का व्युत्पन्न वर्ग संस्करण कॉल करेगा। आप नीचे दिखाए अनुसार प्रोग्राम का आउटपुट देख सकते हैं। इसलिए, फ़ंक्शन ओवरराइडिंग की सहायता से, हम व्युत्पन्न वर्ग-विशिष्ट फ़ंक्शन को लागू कर सकते हैं।

#शामिल

नेमस्पेस एसटीडी का उपयोग करना;

वर्ग पशु
{
सह लोक:
शून्यध्वनि()
{
लागत<< 'पशु ध्वनि!' <<एंडली;
}

};

// व्युत्पन्न वर्ग - कुत्ता वर्ग
वर्ग कुत्ता:सार्वजनिक पशु
{
सह लोक:
शून्यध्वनि()
{
लागत<< 'कुत्ते की आवाज - छाल।' <<एंडली;
}
};

// व्युत्पन्न वर्ग - बतख वर्ग
कक्षा बतख:सार्वजनिक पशु
{
सह लोक:
शून्यध्वनि()
{
लागत<< 'बतख ध्वनि - क्वैक।' <<एंडली;
}
};


NSमुख्य()
{
कुत्ता कुत्ता;
बतख बतख;

कुत्ता।ध्वनि(); // ध्वनि () कुत्ते की
बत्तख।ध्वनि(); // ध्वनि () बतख की

वापसी 0;
}

निष्कर्ष

इस लेख में, मैंने फ़ंक्शन ओवरराइडिंग की व्याख्या की है सी ++ . C++ भाषा रनटाइम बहुरूपता का समर्थन करती है। फंक्शन ओवरराइडिंग सी ++ में रन टाइम पॉलीमॉर्फिज्म को प्राप्त करने में मदद करता है। यह आलेख फ़ंक्शन ओवरराइडिंग की अवधारणा को देखता है और फ़ंक्शन ओवरराइडिंग का उपयोग करके रनटाइम बहुरूपता कैसे प्राप्त करें।