Aspirant Academy

MCQ

सी प्लस प्लस और जावा में ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग MCQ - उत्तर सहित अभ्यास प्रश्न

RAS/RPSC तैयारी के लिए सी प्लस प्लस और जावा में ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग के 45 प्रश्न हल करें।

अभ्यास प्रश्न

प्र.1जावा के चेक्ड एक्सेप्शन के बारे में कौन-सा कथन सही है?

A उन्हें या तो catch ब्लॉक से संभालना होता है या throws से घोषित करना होता है
B वे RuntimeException की सबक्लास होते हैं और कंपाइल टाइम पर किसी हैंडलिंग की जरूरत नहीं होती
C जहां वे होते हैं, उसी मेथड के भीतर उन्हें हमेशा पकड़ा जाना चाहिए
D वे केवल ऑब्जेक्ट निर्माण के दौरान ही हो सकते हैं
व्याख्या

जावा चेक्ड एक्सेप्शन और अनचेक्ड एक्सेप्शन में अंतर करता है। कोई मेथड यदि चेक्ड एक्सेप्शन फेंक सकता है, तो उसे उपयुक्त catch क्लॉज से संभालना होगा या throws क्लॉज से घोषित करना होगा, ताकि कॉलर को यह जिम्मेदारी साफ दिखे। यह नियम फाइल हैंडलिंग में खास तौर पर काम आता है, क्योंकि इनपुट-आउटपुट ऑपरेशन अक्सर चेक्ड एक्सेप्शन घोषित करते हैं।

प्र.2C++ फाइल हैंडलिंग में, जब उसी फाइल स्ट्रीम ऑब्जेक्ट से इनपुट और आउटपुट दोनों ऑपरेशन करवाने हों, तो कौन-सी क्लास सबसे सीधे उपयुक्त है?

A ifstream
B fstream
C ofstream
D stringstream
व्याख्या

C++ की स्ट्रीम लाइब्रेरी सामान्य फाइल-स्ट्रीम भूमिकाओं को अलग करती है: इनपुट के लिए ifstream, आउटपुट के लिए ofstream और ऐसे फाइल स्ट्रीम के लिए fstream जो ओपन मोड के अनुसार इनपुट और आउटपुट दोनों संभाल सकते हैं। stringstream भी स्ट्रीम है, लेकिन वह फाइल के बजाय मेमोरी में रखे स्ट्रिंग बफर का उपयोग करती है।

प्र.3C++ में बेस क्लास का पॉइंटर डिराइव्ड क्लास के ऑब्जेक्ट की ओर इशारा कर रहा है। यदि उसी पॉइंटर से फ़ंक्शन कॉल होने पर रन टाइम पर डिराइव्ड क्लास वाला कार्यान्वयन चलना हो, तो कौन-सी घोषणा ज़रूरी है?

A बेस क्लास में अलग पैरामीटर सूची के साथ उसी फ़ंक्शन को ओवरलोड करें।
B बेस क्लास में फ़ंक्शन को वर्चुअल घोषित करें और डिराइव्ड क्लास में उसका ओवरराइड रूप दें।
C पॉइंटर को पता देने से पहले डिराइव्ड क्लास के ऑब्जेक्ट को स्टैटिक घोषित करें।
D बेस क्लास के डेटा मेंबर पब्लिक कर दें, ताकि पॉइंटर उन्हें देख सके।
व्याख्या

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

प्र.4C++ की किसी बेस क्लास में कम से कम एक प्योर वर्चुअल फ़ंक्शन है। इस घोषणा से कौन-सा निष्कर्ष निकलता है?

A यदि हर डेटा मेंबर का डिफ़ॉल्ट मान हो, तो बेस क्लास के ऑब्जेक्ट सामान्य रूप से बनाए जा सकते हैं।
B कंपाइलर रन टाइम पर इस क्लास को Java इंटरफ़ेस में बदल देता है।
C क्लास ऐब्स्ट्रैक्ट बन जाती है और ठोस डिराइव्ड क्लासों को प्योर वर्चुअल फ़ंक्शन के कार्यान्वयन देने होते हैं।
D क्लास के सभी मेंबर फ़ंक्शन अपने-आप प्राइवेट हो जाते हैं।
व्याख्या

प्योर वर्चुअल फ़ंक्शन C++ क्लास में एक ऐब्स्ट्रैक्ट ऑपरेशन दिखाता है। ऐसी क्लास का ऑब्जेक्ट सीधे नहीं बनाया जा सकता, और जो डिराइव्ड क्लास ठोस बननी है उसे विरासत में मिले सभी प्योर वर्चुअल फ़ंक्शन के अंतिम कार्यान्वयन देने होते हैं। C++ में एक्सेस नियम बदले बिना या Java इंटरफ़ेस को जोड़े बिना इंटरफ़ेस-जैसा व्यवहार दिखाने का यह मुख्य तरीका है।

प्र.5C++ की Account क्लास में balance नाम का प्राइवेट डेटा मेंबर है। क्लास के बाहर से balance में नियंत्रित बदलाव की अनुमति देने का सबसे उचित ऑब्जेक्ट-ओरिएंटेड तरीका कौन-सा है?

A balance को पब्लिक कर दें ताकि हर फ़ंक्शन सीधे उसे मान दे सके।
B balance को केवल कंस्ट्रक्टर के भीतर लोकल वेरिएबल में रखें।
C balance को प्राइवेट रखें और ऐसे पब्लिक मेंबर फ़ंक्शन दें जो जाँच करके उसे बदलें।
D balance को ग्लोबल घोषित कर दें और सभी Account ऑब्जेक्ट उसे साझा करें।
व्याख्या

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

आपने 45 में से 5 नमूना प्रश्न देख लिए हैं

सी प्लस प्लस और जावा में ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग पर अनलिमिटेड अभ्यास RAS टेस्ट सीरीज़ + प्रैक्टिस पैक या गेट पास में मिलता है।

और प्रश्न

6C++ में बहुरूपी डिलीशन के लिए बनाए गए आधार वर्ग में सामान्यतः वर्चुअल डेस्ट्रक्टर होना क्यों ज़रूरी माना जाता है?

Aयह सभी व्युत्पन्न वर्गों को निजी इनहेरिटेंस इस्तेमाल करने के लिए बाध्य करता है।
Bयह सुनिश्चित करता है कि आधार-वर्ग पॉइंटर से व्युत्पन्न ऑब्जेक्ट हटाने पर सही डेस्ट्रक्टर-श्रृंखला चले।
Cयह व्युत्पन्न वर्ग के ऑब्जेक्ट बनने से रोकता है।
Dयह वर्ग के हर सदस्य फ़ंक्शन को स्टैटिक बना देता है।

7Java Swing के किसी बटन पर क्लिक होते ही कोड चलना चाहिए। सामान्य इवेंट-हैंडलिंग मॉडल के अनुसार सबसे सही तरीका कौन-सा है?

Aबटन की घोषणा के आसपास IOException पकड़ें, क्योंकि हर क्लिक फ़ाइल त्रुटि के रूप में आता है।
Bmain मेथड को ओवरराइड करें ताकि वह हर बटन इवेंट अपने-आप प्राप्त कर ले।
Cअनंत लूप में बटन को लगातार जाँचते रहें और देखें कि उसका लेबल बदला है या नहीं।
Dबटन के साथ एक ActionListener रजिस्टर करें और प्रतिक्रिया वाला कोड actionPerformed में रखें।

8जावा में क्लास इनहेरिटेंस और इंटरफ़ेस इम्प्लीमेंटेशन के बीच सही अंतर कौन-सा कथन बताता है?

Aएक क्लास सीधे कई क्लास को extend कर सकती है, लेकिन सिर्फ़ एक इंटरफ़ेस implement कर सकती है
Bइंटरफ़ेस में सिर्फ़ कंस्ट्रक्टर हो सकते हैं और वे मेथड घोषित नहीं कर सकते
Cएक क्लास एक सीधे सुपरक्लास को extend कर सकती है और कई इंटरफ़ेस implement कर सकती है
Dकोई सबक्लास अपने सुपरक्लास से किसी भी एक्सेसिबल मेंबर को इनहेरिट नहीं कर सकती

9C++ में बेस-क्लास पॉइंटर से कॉल करने पर रन टाइम पर डिराइव्ड-क्लास वाला इम्प्लीमेंटेशन चलने के लिए कौन-सी शर्त ज़रूरी है?

Aबेस-क्लास फंक्शन स्टैटिक घोषित हो
Bऑब्जेक्ट केवल स्टैक पर आवंटित हो
Cबेस-क्लास का मेंबर फंक्शन वर्चुअल घोषित हो और डिराइव्ड क्लास में उसे ओवरराइड किया गया हो
Dडिराइव्ड-क्लास के मेंबर फंक्शन का नाम बेस-क्लास फंक्शन से अलग हो

10जावा में क्लासों के बीच इनहेरिटेंस को सही ढंग से कौन-सा कथन बताता है?

Aएक क्लास सीधे एक से अधिक ठोस क्लासों को एक्सटेंड कर सकती है।
Bसुपरक्लास के प्राइवेट फ़ील्ड हर सबक्लास में नाम से सीधे उपलब्ध हो जाते हैं।
Cकंस्ट्रक्टर बिल्कुल सामान्य इंस्टेंस मेथड की तरह विरासत में मिलते हैं।
Dसबक्लास अपनी सुपरक्लास के पहुँच-योग्य मेंबर विरासत में ले सकती है और विरासत में मिले इंस्टेंस मेथड का अपना रूप दे सकती है।

11class Printer : public Device { ... }; घोषणा में C++ की कौन-सी इनहेरिटेंस दिखाई गई है?

Aपब्लिक इनहेरिटेंस, जिसमें आधार के सार्वजनिक सदस्य व्युत्पन्न वर्ग के इंटरफेस में सार्वजनिक ही रहते हैं।
Bकंपोजिशन, क्योंकि प्रिंटर में डिवाइस डेटा सदस्य के रूप में है।
Cफ्रेंड इनहेरिटेंस, जिसमें प्रिंटर हर डिवाइस ऑब्जेक्ट का फ्रेंड बन जाता है।
Dमल्टिपल इनहेरिटेंस, क्योंकि हर व्युत्पन्न वर्ग के एक से अधिक आधार वर्ग होते हैं।

12जावा फ़ाइल हैंडलिंग में FileInputStream या BufferedReader जैसे ऑब्जेक्ट के लिए try-with-resources को क्यों प्राथमिकता दी जाती है?

Aयह पढ़ने के बाद फ़ाइल की सामग्री को इम्यूटेबल बना देता है
Bब्लॉक खत्म होने पर यह घोषित संसाधनों को अपने-आप बंद कर देता है
Cयह बाइनरी स्ट्रीम को अपने-आप कैरेक्टर स्ट्रीम में बदल देता है
Dयह गारंटी देता है कि हर IOException चुपचाप नज़रअंदाज़ हो जाएगा

13जावा इवेंट हैंडलिंग में लिस्नर ऑब्जेक्ट की मुख्य भूमिका क्या होती है?

Aवह ऐसी कॉलबैक मेथड्स लागू करती है जिन्हें रजिस्टर्ड इवेंट होने पर कॉल किया जाता है
Bवह इवेंट सोर्स को बदल देती है ताकि कोई कंपोनेंट इवेंट बना ही न सके
Cवह सभी रन-टाइम एक्सेप्शन को चेक्ड एक्सेप्शन में बदल देती है
Dवह प्रोग्राम से बनी हर इवेंट को स्थायी रूप से जमा करती है

14C++ प्रोग्राम में क्लास Shape में एक वर्चुअल मेंबर फ़ंक्शन draw() है। क्लास Circle, Shape को publicly inherit करती है और draw() को override करती है। अगर Shape* p किसी Circle ऑब्जेक्ट को पॉइंट कर रहा है और p->draw() चलाया जाए, तो इस कॉल के बारे में सबसे सही कथन कौन-सा है?

AShape::draw() और Circle::draw() दोनों अपने-आप base-से-derived क्रम में कॉल हो जाते हैं।
Bdraw() कॉल करने से पहले p को explicitly Circle* में cast करना ज़रूरी है, वरना यह कॉल अवैध है।
CCircle::draw() कॉल होगा, क्योंकि वर्चुअल डिस्पैच बेस पॉइंटर के ज़रिए ऑब्जेक्ट के वास्तविक प्रकार के आधार पर काम करता है।
DShape::draw() हमेशा कॉल होगा, क्योंकि p का घोषित प्रकार Shape* है।

15जावा में try-catch से जुड़े finally ब्लॉक का मुख्य उपयोग क्या है?

Aयह अपवाद पदानुक्रम में नया उपवर्ग घोषित करता है।
Bयह try-catch प्रोसेसिंग के बाद चलने वाला कोड देता है, सामान्यतः संसाधन बंद करने जैसी सफाई के लिए।
Cयह हर चेक्ड अपवाद को अनचेक्ड अपवाद में बदल देता है।
Dइसमें वही एकमात्र कथन होना चाहिए जो अपवाद फेंक सकता है।

प्रोग्रामिंग एवं डेटा संरचना में और विषय

अन्य विषय देखें