त्रुटि: सार वर्ग का दृष्टांत नहीं कर सकता

Truti Sara Varga Ka Drstanta Nahim Kara Sakata



यह लेख एक और त्रुटि के बारे में है जो अक्सर तब होती है जब हम अपने कोड में अमूर्त कक्षाओं के साथ काम कर रहे होते हैं। आइए ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग में अमूर्त कक्षाओं की अवधारणा का अध्ययन करें। एक वर्ग जिसमें स्वयं से निर्मित कोई वस्तु नहीं हो सकती है, उसे एक सार वर्ग के रूप में जाना जाता है। इसे C++ Language में इंटरफ़ेस भी कहा जाता है। C++ भाषा में किसी भी वर्ग को शुद्ध आभासी फलन घोषित करके उसे अमूर्त बनाया जा सकता है। वर्चुअल फ़ंक्शन घोषित करने के लिए, हमें फ़ंक्शन के बाद '= 0' रखना होगा। सार वर्ग माता-पिता या आधार वर्ग के रूप में कार्य करता है जिससे अन्य सभी बाल वर्ग व्युत्पन्न होते हैं। इसलिए, अमूर्त वर्ग तक पहुँचने के लिए, हमें इसे इसके आधार वर्गों से इनहेरिट करना होगा। जब हम एक सार वर्ग को दृष्टांत देने की कोशिश करते हैं, तो हमें एक संकलन त्रुटि मिलती है।

वाक्य - विन्यास

हमारी त्रुटि का त्रुटि संदेश इस प्रकार है:

गलती : वेरिएबल '' को अमूर्त प्रकार का घोषित नहीं कर सकते''

ध्यान दें कि खाली कोष्ठक में चर और सार वर्ग के नाम होंगे।







त्रुटि C2259 : 'राज्य' : अमूर्त वर्ग का दृष्टांत नहीं कर सकते

जब हम इस तरह की त्रुटि का सामना करते हैं तो यह एक और संदेश है जो हमें कंपाइलर से मिलता है।



उदाहरण # 01:

इस त्रुटि को समझने योग्य बनाने के लिए, हम एक उदाहरण का प्रदर्शन करेंगे जिसमें हम अपना कोड इस प्रकार लिखेंगे कि हमें एक त्रुटि मिले। उस उद्देश्य के लिए, हमने 'शेपक्लास' नाम से एक क्लास शुरू की है। इस क्लास को एब्स्ट्रैक्ट बनाने के लिए हमने इसमें “getArea” नाम से एक वर्चुअल फंक्शन डिक्लेयर किया है। हमने क्रमशः 'सेटविड्थ' और 'सेटहाइट' नामों के साथ दो अन्य कार्यों की भी घोषणा की है। हम यहां क्या करना चाहते हैं कि हम ऊंचाई को पैरामीटर के रूप में और चौड़ाई को इनपुट पैरामीटर के रूप में प्राप्त करना चाहते हैं। हम अपने इनपुट पैरामीटर्स की मदद से क्षेत्रफल की गणना करेंगे। हमने मुख्य विधि में अपनी कक्षा का एक उदाहरण बनाया है। उस ऑब्जेक्ट की मदद से हमने मेथड्स को कॉल किया है और हम उस मेथड्स के जरिए इनपुट पैरामीटर्स को पास करेंगे। उसके बाद, हमने परिणाम देखने के लिए अपना आउटपुट प्रिंट किया।



#शामिल

नेमस्पेस एसटीडी का उपयोग करना ;
वर्ग आकार वर्ग
{
जनता :
आभासी पूर्णांक गेटारिया ( ) = 0 ;
शून्य सेटविड्थ ( पूर्णांक में )
{
चौड़ाई = में ;
}
शून्य सेटहाइट ( पूर्णांक एच )
{
कद = एच ;
}
संरक्षित :
पूर्णांक चौड़ाई ;
पूर्णांक कद ;
} ;
पूर्णांक मुख्य ( शून्य )
{
शेप क्लासश ;
श्री। सेटविड्थ ( 1 ) ;
श्री। सेटहाइट ( दो ) ;
अदालत << 'कुल आयत क्षेत्र:' << श्री। गेटारिया ( ) << endl ;
वापसी 0 ;
}

हमारे कोड के निष्पादन के बाद सिस्टम ने हमें एक त्रुटि दी। त्रुटि संदेश कहता है कि हम चर 'श' को सार प्रकार 'शेपक्लास' के रूप में घोषित नहीं कर सकते। अब, कंपाइलर यह बताने की कोशिश कर रहा है कि 'शेपक्लास' एक अमूर्त प्रकार है और हम इसके चर को घोषित नहीं कर सकते। तो, संदेश के साथ, हम स्पष्ट रूप से समझ सकते हैं कि संकलक हमें अपने सार वर्ग को तत्काल नहीं करने दे रहा है, यही कारण है कि सिस्टम हमें त्रुटि दे रहा है।





त्रुटि को हल करने के लिए, हमने एक और वर्ग 'आयत' घोषित किया। यह क्लास हमारे एब्स्ट्रैक्ट क्लास का चाइल्ड क्लास होगा और हम इस क्लास में अपने वर्चुअल फंक्शन की बॉडी घोषित करेंगे। उसके बाद हम main मेथड से उसका object create करेंगे और उसके object की मदद से Functions को Call करेंगे।



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

उदाहरण # 02:

इस उदाहरण में, हम कोई गणितीय गणना नहीं करेंगे। यह उदाहरण एक सामान्य उदाहरण है जो हमें सार वर्गों को समझने में मदद करेगा और कोड को निष्पादित करते समय संकलक विधियों और कक्षाओं के बीच कैसे चलता है। इस क्लास में हमने एक एब्स्ट्रैक्ट क्लास बनाया है और इसे “AbsClass” नाम दिया है। हमने एक और वर्ग 'चाइल्ड क्लास' घोषित किया है, लेकिन यह एक सार वर्ग नहीं है। यह वर्ग हमारे अमूर्त वर्ग से लिया गया है।

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

#शामिल

नेमस्पेस एसटीडी का उपयोग करना ;
क्लास एब्स क्लास
{
जनता :
आभासी पूर्णांक वर्टफंक ( ) = 0 ;
शून्य valueFunc ( पूर्णांक में )
{
चौड़ाई = में ;
अदालत << 'ऑब्जेक्ट का उपयोग करके पास किया गया मान' << में << endl ;
}
संरक्षित :
पूर्णांक चौड़ाई ;
} ;
क्लास चाइल्ड क्लास :
सार्वजनिक एब्स क्लास
{
जनता :
पूर्णांक वर्टफंक ( ) {
अदालत << 'वर्चुअल फंक्शन में' << endl ;
}
} ;
पूर्णांक मुख्य ( शून्य )
{
चाइल्ड क्लास सी.सी ;
सी.सी. valueFunc ( 5 ) ;
अदालत << सी.सी. वर्टफंक ( ) << endl ;
वापसी 0 ;
}

हमारे कोड के निष्पादन के बाद, हमें एक त्रुटि मिलेगी। यह त्रुटि मूल रूप से यह है कि हम एक अमूर्त वर्ग का दृष्टांत नहीं दे सकते हैं जिसे हम यहाँ अपनी मुख्य विधि में करने का प्रयास कर रहे हैं। यहां एक बात ध्यान देने वाली है कि हमारे मैसेज में वेरिएबल और एब्स्ट्रैक्ट टाइप को बदल दिया गया है।

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

हमारे कोड के निष्पादन पर, कंपाइलर ने इस बार कोई त्रुटि नहीं डाली है। इसके बजाय, सिस्टम ने हमारे कोड को सफलतापूर्वक संकलित किया और हमें आउटपुट दिया। अब, हम आउटपुट पर एक नजर डालते हैं। सिस्टम ने 'ऑब्जेक्ट का उपयोग करके पास किया गया मान' और इसके सामने '5' मुद्रित किया है। क्योंकि हम main मेथड में अपने उदाहरण का उपयोग करके 5 पास कर चुके हैं। उसके बाद, यह उस लाइन को प्रिंट करता है जिसे हमने अपने वर्चुअल फंक्शन में पूछा था।

निष्कर्ष

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