आभासी आणि शुद्ध आभासी कार्य दरम्यान फरक

लेखक: Laura McKinney
निर्मितीची तारीख: 2 एप्रिल 2021
अद्यतन तारीख: 13 मे 2024
Anonim
व्हर्च्युअल फंक्शन्स, प्युअर व्हर्च्युअल फंक्शन्स आणि ओओपी मधील अ‍ॅबस्ट्रॅक्ट क्लासेसमधील संबंध स्पष्ट केले
व्हिडिओ: व्हर्च्युअल फंक्शन्स, प्युअर व्हर्च्युअल फंक्शन्स आणि ओओपी मधील अ‍ॅबस्ट्रॅक्ट क्लासेसमधील संबंध स्पष्ट केले

सामग्री


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

तथापि, आभासी फंक्शनला डायनॅमिक डिस्पॅच आणि रन-टाइम डिस्पॅच असेही म्हणतात, कारण फंक्शन वापरल्या गेलेल्या ऑब्जेक्टच्या प्रकारानुसार रन टाइममध्ये निर्दिष्ट केले जाते.

पॉलिमॉर्फिझम सी ++ आणि जावा या दोन्ही भाषांनी समर्थित आहे. जावामध्ये, व्हर्च्युअल फंक्शन सी ++ ही संज्ञा असल्याने ‘व्हर्च्युअल फंक्शन’ ऐवजी “ओव्हरराइडिंग” हा शब्द वापरला जातो.

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

तुलना चार्ट

तुलनासाठी आधारआभासी कार्यशुद्ध आभासी कार्य
मूलभूतव्हर्च्युअल फंक्शनची व्याख्या बेस क्लासमध्ये असते.बेस वर्गामध्ये शुद्ध आभासी फंक्शनची कोणतीही व्याख्या नाही.
घोषणाव्हर्च्युअल फंक्ट_नाव (पॅरामीटर_सूची) {. . . . .};व्हर्च्युअल फंक्ट_नाव (पॅरामीटर_सूची) = 0;
व्युत्पन्न वर्गसर्व व्युत्पन्न वर्ग बेस क्लासच्या व्हर्च्युअल फंक्शनवर ओव्हरराईड करू शकतात किंवा नसू शकतात.सर्व व्युत्पन्न वर्गांनी बेस वर्गाच्या व्हर्च्युअल फंक्शन अधिलिखित करणे आवश्यक आहे.
प्रभाव

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


व्हर्च्युअल फंक्शनची व्याख्या

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

घोषणा:

वर्ग बेस {सार्वजनिक: आभासी प्रकार funt_name (घटक-यादी) {. . . }};

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


बहुस्तरीय वारसा

मल्टीलेव्हल इनहेरिटन्समध्ये, जिथे एक व्युत्पन्न वर्ग ज्याला त्याच्या बेस क्लासमधून व्हर्च्युअल फंक्शनचा वारसा मिळाला आहे, जेव्हा स्वतः दुसर्‍या साधित वर्गासाठी बेस क्लास म्हणून वापरला जातो तेव्हा व्हर्च्युअल फंक्शन अजूनही अधिलिखित केले जाऊ शकते. जेव्हा व्हर्च्युअल फंक्शनचा वारसा मिळाला तेव्हा त्याचा व्हर्च्युअल स्वरुपाचा वारसा देखील मिळतो.

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

शुद्ध आभासी कार्याची व्याख्या

वर पाहिल्याप्रमाणे जर व्युत्पन्न वर्ग वर्च्युअल फंक्शन अधिलिखित करत नसेल तर बेस क्लास द्वारे परिभाषित आभासी फंक्शन वापरला जाईल. परंतु, बेस क्लास स्वतःच आभासी फंक्शन परिभाषित करीत नसल्यास काय करावे. बर्‍याच वेळा, बेस वर्गास व्हर्च्युअल फंक्शनसाठी कोणतीही व्याख्या नसते किंवा काहीवेळा आपल्याला असे वाटते की सर्व व्युत्पन्न वर्गाने आभासी फंक्शन अधिलिखित केले पाहिजे.

या वरील दोन परिस्थिती हाताळण्यासाठी, सी ++ “या संकल्पनेचे समर्थन करतेशुद्ध आभासी कार्य“. ‘शुद्ध आभासी कार्य’ बेस क्लासमध्ये घोषित केले जाते परंतु बेस वर्गामध्ये त्याची व्याख्या नसते. शुद्ध आभासी कार्य खालीलप्रमाणे घोषित केले आहे.

आभासी प्रकार फंक्ट_नाव (पॅरामीटर_सूची) = 0;

जेव्हा जेव्हा बेस क्लासमधील व्हर्च्युअल फंक्शन “शुद्ध” केले जाते, तेव्हा प्रत्येक व्युत्पन्न वर्गाने बेस क्लासच्या शुद्ध व्हर्च्युअल फंक्शनला अनिवार्यपणे अधिलिखित केले पाहिजे. जर व्युत्पन्न वर्ग बेस वर्गाच्या शुद्ध आभासी कार्याचे अधिलिखित करण्यात अयशस्वी झाला तर त्याचा परिणाम संकलनात त्रुटी होईल.

अमूर्त वर्ग

ज्या वर्गात कमीतकमी एक शुद्ध कार्य असेल त्याला "अ‍ॅबस्ट्रॅक्ट क्लास" असे म्हणतात. अ‍ॅबस्ट्रॅक्ट क्लासेसची कोणतीही वस्तू तयार केली जाऊ शकत नाही, परंतु आपण अ‍ॅबस्ट्रॅक्ट क्लासेसचे संदर्भ आणि पॉईंटर्स तयार करू शकता. अ‍ॅबस्ट्रॅक्ट क्लासच्या सदस्यांमधून अ‍ॅबस्ट्रॅक्ट बेस क्लासचा वारसा मिळालेल्या व्युत्पन्न वर्गाच्या ऑब्जेक्टद्वारे प्रवेश केला जाऊ शकतो.

एक वर्ग ज्यास आपण अमूर्त घोषित करू इच्छित आहात, कीवर्ड वापरा 'गोषवारा' च्या समोर ‘वर्ग’ कीवर्ड.

// उदाहरणार्थ अमूर्त वर्ग वर्ग-नाव {. . आभासी प्रकार फंक्ट_नाव (पॅरामीटर_सूची) = 0; . . };

  1. व्हर्च्युअल फंक्शन्स निश्चितपणे बेस क्लासमध्ये परिभाषित केल्या आहेत आणि व्युत्पन्न केलेल्या क्लासमध्ये रीफिफाइन (ओव्हरराइड) केल्या आहेत. दुसरीकडे, शुद्ध वर्च्युअल फंक्शन बेस क्लास मध्ये विशेषतः परिभाषित केलेले नाही
  2. आवश्यक असल्यास व्युत्पन्न कार्याचे पुनर्निर्देशन (अधिलिखित) वर्ग आणि शुद्ध वर्च्युअल फंक्शनच्या बाबतीत व्युत्पन्न वर्गास शुद्ध वर्च्युअल फंक्शनचे निश्चितपणे परिभाषित करावे लागेल.
  3. व्युत्पन्न वर्ग वर्च्युअल फंक्शनचे पुन: परिभाषित करण्यात (अधिलिखित) करण्यात अयशस्वी झाल्यास तो बेस क्लासचे व्हर्च्युअल फंक्शन वापरू शकतो. याउलट, व्युत्पन्न वर्ग शुद्ध आभासी कार्य अधिलिखित करण्यात अयशस्वी झाल्यास संकलन त्रुटी उद्भवते.
  4. व्हर्च्युअल फंक्शन असलेला बेस क्लास इन्स्टंट केला जाऊ शकतो म्हणजे त्याचा ऑब्जेक्ट तयार केला जाऊ शकतो. त्याउलट, शुद्ध वर्च्युअल फंक्शन असलेला बेस क्लास म्हणजे एक stबस्ट्रॅक्ट क्लास इंस्टंट केला जाऊ शकत नाही कारण अ‍ॅबस्ट्रॅक्ट क्लास पूर्णपणे परिभाषित केलेला नाही.

टीपः
संपूर्ण प्रोग्राममध्ये ‘व्हर्च्युअल फंक्शन’ आणि ‘शुद्ध व्हर्च्युअल फंक्शन’ चा नमुना समान असतो.

निष्कर्ष:

'व्हर्च्युअल फंक्शन्स' आणि 'शुद्ध व्हर्च्युअल फंक्शन' या दोहोंचे महत्त्व आहे, जसे 'व्हर्च्युअल फंक्शन्स' प्रमाणेच सर्व व्युत्पन्न वर्गाला व्हर्च्युअल फंक्शनची पुन्हा व्याख्या करण्याची आवश्यकता नाही आणि जिथे आपल्याला पाहिजे आहे की सर्व व्युत्पन्न वर्गाने व्हर्च्युअल फंक्शनची पुन्हा व्याख्या करावी, शुद्ध व्हर्च्युअल फंक्शन तेथे उत्तम प्रकारे लागू होते.