सी ++ मधील फंक्शन ओव्हरलोडिंग आणि ओव्हरराइडिंग दरम्यान फरक

लेखक: Laura McKinney
निर्मितीची तारीख: 1 एप्रिल 2021
अद्यतन तारीख: 11 मे 2024
Anonim
सी ++ मधील फंक्शन ओव्हरलोडिंग आणि ओव्हरराइडिंग दरम्यान फरक - तंत्रज्ञान
सी ++ मधील फंक्शन ओव्हरलोडिंग आणि ओव्हरराइडिंग दरम्यान फरक - तंत्रज्ञान

सामग्री


मध्ये ‘ओव्हरलोडिंग‘आम्ही एकाच फंक्शन नावासह ओव्हरलोड फंक्शन्सची पुन्हा व्याख्या करतो परंतु, भिन्न संख्या आणि पॅरामीटर्सचे प्रकार. मध्ये ‘अधिलिखित‘अधिलिखित फंक्शनचा नमुना संपूर्ण कार्यक्रमात सारखा असतो परंतु, अधिलिखित करण्याचे कार्य बेस वर्गाच्या‘ व्हर्च्युअल ’कीवर्डच्या आधी असते आणि कोणत्याही कीवर्डशिवाय व्युत्पन्न वर्गाद्वारे पुन्हा परिभाषित केले जाते.

पॉलिफॉर्मिझम हे ओओपीच्या महत्त्वपूर्ण वैशिष्ट्यांपैकी एक आहे. याचा अर्थ सहजपणे ‘एकाधिक फॉर्मसाठी एक नाव वापरणे’. पॉलिमॉर्फिझम ‘फंक्शन ओव्हरलोडिंग’, ‘ऑपरेटर ओव्हरलोडिंग’ आणि ‘व्हर्च्युअल फंक्शन’ वापरून लागू केले जाऊ शकते. ‘ओव्हरलोडिंग’ आणि ‘ओव्हरराइडिंग’ हे दोन्ही बहुरूपी संकल्पना सूचित करतात. येथे, ‘ओव्हरलोडिंग’ म्हणजे कंपाईल टाइम बहुरूपता आणि ‘ओव्हरराइडिंग’ म्हणजे रन टाइम पॉलिमॉर्फिझम. पुढील अभ्यास, जर आपण ‘ओव्हरलोडिंग’ आणि ‘ओव्हरराइडिंग’ मधील प्रमुख फरकांबद्दल चर्चा केली तर.

पुढे, आम्ही तुलना चार्टच्या मदतीने ओव्हरलोडिंग आणि ओव्हरराइडिंगमधील फरक अभ्यासतो.

  1. तुलना चार्ट
  2. व्याख्या
  3. मुख्य फरक
  4. समानता
  5. निष्कर्ष


तुलना चार्ट:

तुलनासाठी आधारओव्हरलोडिंगअधिलिखित
नमुनासंख्या किंवा मापदंडाचा प्रकार भिन्न असू शकतो म्हणून नमुना भिन्न आहे.प्रोटोटाइपचे सर्व पैलू समान असले पाहिजेत.
कीवर्डओव्हरलोडिंग दरम्यान कोणताही कीवर्ड लागू केलेला नाही.अधोरेखित करावयाचे कार्य बेस वर्गामध्ये वर्च्युअल कीवर्डच्या आधी केले जाईल.
विशिष्ट घटकपॅरामीटरची संख्या किंवा प्रकार भिन्न आहेत जे फंक्शनची आवृत्ती कॉल केली जाते हे निर्धारित करते.कोणत्या वर्गाचे कार्य पॉइंटरद्वारे कॉल केले जाते ते त्या पॉईंटरला कोणत्या क्लास ऑब्जेक्टचे वाटप केले जाते त्याद्वारे निश्चित केले जाते.
नमुना परिभाषित करीत आहेफंक्शनचे नाव त्याच नावाने परिभाषित केले गेले आहे, परंतु भिन्न संख्या आणि मापदंडाचे प्रकार.फंक्शन मुख्य वर्गातील कीवर्ड व्हर्च्युअलच्या आधी परिभाषित केले जाते आणि आउटवर्ड कीवर्डसह व्युत्पन्न वर्गाद्वारे पुन्हा परिभाषित केले जाते.
सिद्धीची वेळसंकलित वेळ.धावण्याची वेळ.
कन्स्ट्रक्टर / व्हर्च्युअल फंक्शनकन्स्ट्रक्टर ओव्हरलोड केले जाऊ शकतात.व्हर्च्युअल फंक्शन अधिलिखित केले जाऊ शकते.
विध्वंसक
विध्वंसक ओव्हरलोड करणे शक्य नाही.विध्वंसक अधिलिखित केले जाऊ शकते.
बंधनकारकओव्हरलोडिंग लवकर बंधन साध्य करते.अधिलिखित म्हणजे उशीरा बंधनकारक होय.


ओव्हरलोडिंग ची व्याख्या

कंपाईल-टाइम पॉलीमॉर्फिझमला ‘ओव्हरलोडिंग’ म्हणतात. बहुपक्षीय संकल्पनेतून ओव्हरलोडिंग तयार केल्यामुळे ते “एकाधिक पद्धतींसाठी सामान्य इंटरफेस” प्रदान करते. याचा अर्थ असा की जर एखादा फंक्शन ओव्हरलोड असेल तर त्यामध्ये हे कार्य नाव पुन्हा परिभाषित केले जाईल.

ओव्हरलोड केलेल्या फंक्शन्स, भिन्न ‘संख्या किंवा पॅरामीटर (से)’ प्रकारात भिन्न असतात, यामुळे एका ओव्हरलोड केलेल्या फंक्शनला दुसर्‍यापेक्षा वेगळे केले जाते. अशा प्रकारे, कंपाइलर ओळखतो की कोणत्या ओव्हरलोड फंक्शनला कॉल केले जात आहे. बहुतेक सामान्यपणे ओव्हरलोड फंक्शन्स म्हणजे ‘कन्स्ट्रक्टर’. ‘कॉपी कन्स्ट्रक्टर’ हा एक प्रकारचा “कन्स्ट्रक्टर ओव्हरलोडिंग” आहे.

सी ++ मध्ये ओव्हरलोडिंगची अंमलबजावणी

वर्ग ओव्हरलोड {इंट अ, बी; सार्वजनिक: इंट लोड (इंट एक्स) {// प्रथम लोड () फंक्शन अ = एक्स; रिटर्न ए; load इंट लोड (इंट एक्स, इंट वाय) {// सेकंद लोड () फंक्शन अ = एक्स; b = y; परत एक * बी; }}; इंट मेन () {ओव्हरलोड ओ 1; ओ 1.लोड (20); // प्रथम लोड () फंक्शन कॉल ओ 1.लोड (20,40); // सेकंड लोड () फंक्शन कॉल}

येथे वर्ग ओव्हरलोडचे फंक्शन लोड () ओव्हरलोड केले गेले आहे. वर्गाची दोन ओव्हरलोड केलेली फंक्शन्स अशा प्रकारे ओळखली जाऊ शकतात की प्रथम लोड () फंक्शन केवळ एक पूर्णांक पॅरामीटर स्वीकारते, तर दुसरा भार () फंक्शन दोन पूर्णांक पॅरामीटर स्वीकारतो. जेव्हा क्लास ओव्हरलोडचे ऑब्जेक्ट एका पॅरामीटरसह लोड () फंक्शनला कॉल करते, तेव्हा प्रथम लोड () फंक्शन कॉल केले जाईल. जेव्हा ऑब्जेक्ट कॉल () फंक्शन दोन पॅरामीटर्स पार करते तेव्हा दुसरा लोड () फंक्शन कॉल केला जातो.


अधिलिखित व्याख्या

रन-टाइम दरम्यान मिळवलेल्या पॉलिमॉर्फिझमला ‘ओव्हरराइडिंग’ असे म्हणतात. हे ‘वारसा’ आणि ‘व्हर्च्युअल फंक्शन्स’ वापरून साधले जाते. अधिलिखित करण्याचे कार्य बेस वर्गाच्या ‘व्हर्च्युअल’ कीवर्डद्वारे आणि कोणत्याही कीवर्डशिवाय व्युत्पन्न केलेल्या वर्गात पुन्हा परिभाषित केले जाते.

ओव्हरराइडिंगच्या बाबतीत लक्षात ठेवणारी सर्वात महत्वाची गोष्ट म्हणजे ओव्हरराइड फंक्शनचा नमुना बदलू नये जेव्हा व्युत्पन्न वर्ग त्याची पुनर् परिभाषित करतो. जेव्हा अधिलिखित फंक्शनला कॉल दिला जातो, तेव्हा फंक्शनची कोणती आवृत्ती ‘पॉइंटरद्वारे दर्शविलेल्या ऑब्जेक्टच्या प्रकारावर’ आधारित फंक्शनची कोणती आवृत्ती म्हटले जाते हे सी ++ निर्धारित करते.

सी ++ मध्ये अधिलिखितची अंमलबजावणी

क्लास बेस {सार्वजनिक: व्हर्च्युअल शून्य फंक्ट () base // बेस क्लास कॉटचे व्हर्च्युअल फंक्शन << "हे बेस क्लासेस फंक्ट () आहे; }}; क्लास डेरिव्ह्ड 1: पब्लिक बेस {पब्लिक: शून्य फंक्ट () {// बेस वर्गाचे व्हर्च्युअल फंक्शन डेरिव्ह्ड 1 क्लास कॉउटमध्ये पुन्हा परिभाषित केले गेले << "ही एक डेरिव्ह्ड 1 क्लास फंट ()" आहे; }}; क्लास डेरिव्ह्ड 2: पब्लिक बेस {पब्लिक: शून्य फंक्ट () {// बेस वर्गाचे व्हर्च्युअल फंक्शन डेरिव्ह्ड 2 क्लास कॉउटमध्ये पुन्हा परिभाषित केले गेले << "ही एक डेरिव्ह्ड 2 क्लास फंट ()" आहे; }}; इंट मेन () {बेस * पी, बी; व्युत्पन्न 1 डी 1; व्युत्पन्न 2 डी 2; * पी = & बी; पी-> फण्ट (); // बेस क्लास फंक्ट वर कॉल (). * पी = & डी 1; पी-> फण्ट (); // डेरिव्ह्ड 1 क्लास फंट () वर कॉल. * पी = & डी 2; पी-> फण्ट (); // कॉल करण्यासाठी व्युत्पन्न 2 वर्ग फंट (). रिटर्न 0; }

येथे एक सिंगल बेस क्लास आहे जो सार्वजनिकपणे दोन साधित वर्गाद्वारे वारसा मिळाला आहे. व्हर्च्युअल फंक्शन बेस वर्गामध्ये ‘व्हर्च्युअल’ कीवर्ड सह परिभाषित केले जाते आणि हे कीवर्ड नसलेल्या दोन्ही व्युत्पन्न वर्गाद्वारे पुन्हा परिभाषित केले जाते. मुख्य () मध्ये, बेस क्लास पॉईंटर व्हेरिएबल ‘पी’ आणि ऑब्जेक्ट ‘बी’ तयार करतो; ‘व्युत्पन्न 1 ′ वर्ग ऑब्जेक्ट डी 1 तयार करतो आणि व्युत्पन्न 2 वर्ग ऑब्जेक्ट डी 2’ तयार करतो.

आता सुरुवातीला बेस क्लासच्या ऑब्जेक्टचा पत्ता ‘बी’ बेस क्लासच्या ‘पी’ च्या पॉईंटरला देण्यात आला आहे. ‘पी’ फंक्शन फंक्टला कॉल करते (), त्यामुळे बेस क्लासचे फंक्शन कॉल केले जाते.नंतर व्युत्पन्न केलेल्या श्रेणी ऑब्जेक्टचा पत्ता ‘डी 1’ पॉईंटरला ‘पी’ नियुक्त केला आहे, तो पुन्हा फंक्टला कॉल करते (); येथे डेरिव्ह्ड 1 क्लासचे फंक्शन फंक्ट () कार्यान्वित झाले आहे. शेवटी, पॉईंटर ‘पी’ व्युत्पन्न 2 वर्गाच्या ऑब्जेक्टला नियुक्त केला आहे. मग ‘पी’ कॉल करते फंक्शन फंक्ट () जे डेरिव्ह्ड 2 क्लासचे फंक्शन फंक्ट () कार्यान्वित करते.

जर डेरिव्ह्ड 1 / व्युत्पन्न 2 वर्गाने फंक्ट () चे पुन्हा परिभाषित केले नाही, तर व्हर्च्युअल फंक्शन ‘श्रेणीबद्ध’ असल्यामुळे बेस क्लासचे फंक्ट () म्हटले गेले असते.

  1. ओव्हरलोड केले जाणा of्या फंक्शनचा प्रोटोटाइप ओव्हरलोड फंक्शनला पास केलेल्या पॅरामीटरच्या प्रकार आणि संख्येमुळे भिन्न आहे. दुसरीकडे, अधिलिखित फंक्शनचा प्रोटोटाइप बदलत नाही कारण अधिलिखित फंक्शन वेगवेगळ्या वर्गासाठी भिन्न क्रियाही करते कारण ते संबंधित परंतु समान प्रकारचे आणि पॅरामीटर असतात.
  2. ओव्हरलोड फंक्शनचे नाव कोणत्याही कीवर्डच्या आधी नाही तर ओव्हरराइड फंक्शनचे नाव फक्त बेस क्लास मधील “व्हर्च्युअल” कीबोर्ड च्या आधी आहे.
  3. कोणते ओव्हरलोड केलेले फंक्शन फंक्शनला पुरवले जाते त्या पॅरामीटरच्या प्रकार किंवा संख्येवर अवलंबून असते. कोणत्या वर्गाची विनंती केली आहे या अधिलिखित फंक्शनवर अवलंबून आहे, कोणत्या वर्गाचा ऑब्जेक्ट पत्ता पॉईंटरला नेमला आहे, ज्याने फंक्शनची विनंती केली.
  4. कोणते अतिभारित कार्य करावे लागेल ते संकलित वेळी निराकरण केले जाईल. कोणत्या ओव्हरराइड फंक्शनची विनंती केली पाहिजे हे रनटाइम दरम्यान सोडविले जाते.
  5. कन्स्ट्रक्टर ओव्हरलोड केले जाऊ शकतात परंतु अधिलिखित केले जाऊ शकत नाहीत.
  6. विध्वंसकांना जास्त लोड केले जाऊ शकत नाही, परंतु ते अधिलिखित केले जाऊ शकतात.
  7. ओव्हरलोडिंग लवकर बंधन साध्य करते कारण ओव्हरलोड केलेल्या कार्याचे संकलन वेळेत निराकरण केले जाईल. अधिलिखित करणे उशीरा बंधन साध्य करते कारण अधिलिखित फंक्शनचे आवाहन केले जाईल ते रनटाइम दरम्यान निराकरण केले जाईल.

समानता

  1. दोघेही एका वर्गाच्या मेंबर फंक्शन्सवर लागू होतात.
  2. पॉलिमॉर्फिझम ही या दोघांमागील मूलभूत संकल्पना आहे.
  3. आम्ही कार्यांवर ओव्हरलोडिंग आणि अधिलिखित लागू करताना फंक्शनचे नाव समान असते.

निष्कर्ष

ओव्हरलोडिंग आणि अधिलिखित समान दिसते, परंतु असे नाही. फंक्शन्स ओव्हरलोड केले जाऊ शकतात परंतु, कोणताही वर्ग भविष्यात ओव्हरलोड केलेल्या फंक्शनची पुन्हा व्याख्या करू शकत नाही. व्हर्च्युअल फंक्शन ओव्हरलोड केले जाऊ शकत नाही; ते केवळ अधिलिखित केले जाऊ शकतात.