top 70 c interview questions
प्रवेश-स्तर के उम्मीदवारों के साथ-साथ अनुभवी पेशेवरों के लिए कोड उदाहरण के साथ बहुधा पूछे जाने वाले बुनियादी और उन्नत सी ++ साक्षात्कार प्रश्न:
यह विस्तृत लेख निश्चित रूप से उन लोगों के लिए एक बुकमार्क होगा जो C ++ साक्षात्कार की तैयारी कर रहे हैं।
C ++ में लगभग सभी प्रमुख विषय स्टैंडर्ड टेम्प्लेट लाइब्रेरी (STL), इत्यादि जैसे उन्नत विषयों पर कुछ बुनियादी सवालों के साथ यहाँ कवर किए गए हैं।
C ++ कोडिंग प्रश्नों का यह सेट आपको किसी भी C ++ साक्षात्कार का आत्मविश्वास से सामना करने और पहले प्रयास में इसे सफलतापूर्वक साफ़ करने में मदद करेगा।
आप क्या सीखेंगे:
- सी ++ साक्षात्कार कोड उदाहरण के साथ प्रश्न
सी ++ साक्षात्कार कोड उदाहरण के साथ प्रश्न
नीचे सूचीबद्ध सबसे लोकप्रिय C ++ प्रोग्रामिंग साक्षात्कार प्रश्न हैं जिनका उत्तर C ++ विशेषज्ञ द्वारा दिया गया है।
यह भी पढ़े => शीर्ष सी प्रोग्रामिंग साक्षात्कार प्रश्न
बेसिक सी ++
C ++ प्रोग्राम की संरचना
Q # 1) C ++ प्रोग्राम की मूल संरचना क्या है?
उत्तर: C ++ प्रोग्राम की मूल संरचना नीचे दी गई है:
#include int main() { cout<<”Hello,World!”; return 0; }
पहली पंक्ति जो 'से शुरू होती है' # ' एक है प्रक्रमण करने से पहले के निर्देश । इस मामले में, हम उपयोग कर रहे हैं शामिल एक निर्देशक के रूप में जो कंपाइलर को हेडर शामिल करने के लिए कहता है, जबकि iostream.h 'जो कार्यक्रम में बाद में बुनियादी इनपुट / आउटपुट के लिए उपयोग किया जाएगा।
अगली पंक्ति 'मुख्य' फ़ंक्शन है जो पूर्णांक देता है। मुख्य कार्य किसी भी C ++ प्रोग्राम के लिए निष्पादन का प्रारंभिक बिंदु है। स्रोत कोड फ़ाइल में इसकी स्थिति के बावजूद, मुख्य फ़ंक्शन की सामग्री को हमेशा C ++ कंपाइलर द्वारा पहले निष्पादित किया जाता है।
अगली पंक्ति में, हम खुले घुंघराले ब्रेसिज़ देख सकते हैं जो कोड के ब्लॉक की शुरुआत का संकेत देते हैं। इसके बाद, हम प्रोग्रामिंग इंस्ट्रक्शन या कोड की लाइन देखते हैं जो गिनती का उपयोग करता है जो मानक आउटपुट स्ट्रीम है (इसकी परिभाषा iostream.h में मौजूद है)।
यह आउटपुट स्ट्रीम वर्णों की एक स्ट्रिंग लेता है और इसे एक मानक आउटपुट डिवाइस पर प्रिंट करता है। इस मामले में, यह 'हैलो, वर्ल्ड!' है। कृपया ध्यान दें कि प्रत्येक सी ++ निर्देश एक अर्धविराम (;) के साथ समाप्त होता है, जो बहुत आवश्यक है और इसे छोड़ने से संकलन त्रुटियों का परिणाम होगा।
ब्रेस} को बंद करने से पहले, हम एक और लाइन 'रिटर्न 0' देखते हैं। यह मुख्य कार्य के लिए वापसी बिंदु है।
प्रत्येक C ++ प्रोग्राम में एक बुनियादी संरचना होगी जैसा कि ऊपर एक पूर्वप्रक्रमक निर्देश के साथ दिखाया गया है, मुख्य फ़ंक्शन घोषणा के बाद कोड का एक ब्लॉक होता है और फिर मुख्य फ़ंक्शन पर लौटने का बिंदु होता है जो कार्यक्रम के सफल निष्पादन को इंगित करता है।
Q # 2) C ++ में क्या टिप्पणियां हैं?
उत्तर: C ++ में टिप्पणियाँ केवल संकलक द्वारा अनदेखा स्रोत कोड का एक टुकड़ा हैं। वे केवल प्रोग्रामर के लिए अपने स्रोत कोड के बारे में विवरण या अतिरिक्त जानकारी जोड़ने के लिए सहायक होते हैं।
C ++ में टिप्पणी जोड़ने के दो तरीके हैं:
- // एकल-पंक्ति टिप्पणी
- / * ब्लॉक टिप्पणी * /
कंपाइलर का सामना '//' करने के बाद पहला प्रकार सब कुछ त्याग देगा। दूसरे प्रकार में, कंपाइलर '/ *' और '* /' के बीच सबकुछ छोड़ देता है।
चर, डेटा प्रकार, और लगातार
क्यू # 3) एक चर की घोषणा और परिभाषा के बीच अंतर।
उत्तर: एक चर की घोषणा केवल एक चर और चर नाम के डेटा प्रकार को निर्दिष्ट कर रही है। घोषणा के परिणामस्वरूप, हम संकलक को निर्दिष्ट डेटा प्रकार के अनुसार मेमोरी में एक चर के लिए स्थान आरक्षित करने के लिए कहते हैं।
उदाहरण:
int Result; char c; int a,b,c;
उपरोक्त सभी वैध घोषणाएं हैं। यह भी ध्यान दें कि घोषणा के परिणामस्वरूप, चर का मान अनिर्धारित है।
जबकि, एक परिभाषा घोषित चर का कार्यान्वयन / तात्कालिकता है जहां हम घोषित चर के लिए उचित मूल्य को जोड़ते हैं ताकि लिंकर उपयुक्त संस्थाओं के संदर्भों को लिंक करने में सक्षम हो।
ऊपर के उदाहरण से ,
परिणाम = 10;
सी = ’ए ';
ये मान्य परिभाषाएँ हैं।
Q # 4) किसी वैरिएबल के लोकल और ग्लोबल स्कोप पर टिप्पणी करें।
उत्तर: एक चर के दायरे को प्रोग्राम कोड की सीमा के रूप में परिभाषित किया जाता है जिसके भीतर चर सक्रिय रहता है यानी इसे घोषित या परिभाषित या इसके साथ काम किया जा सकता है।
C ++ में दो तरह के स्कोप हैं:
- स्थानीय स्कोप: एक चर को स्थानीय स्कोप कहा जाता है या जब यह एक कोड ब्लॉक के अंदर घोषित किया जाता है तो स्थानीय होता है। चर केवल ब्लॉक के अंदर सक्रिय रहता है और कोड ब्लॉक के बाहर पहुंच योग्य नहीं होता है।
- वैश्विक कार्यक्षेत्र: एक चर का एक वैश्विक दायरा होता है जब यह पूरे कार्यक्रम में सुलभ होता है। सभी फ़ंक्शन परिभाषाओं से पहले कार्यक्रम के शीर्ष पर एक वैश्विक चर घोषित किया जाता है।
उदाहरण:
#include Int globalResult=0; //global variable int main() { Int localVar = 10; //local variable. ….. }
Q # 5) प्रोग्राम में ग्लोबल वेरिएबल और लोकल वैरिएबल एक ही नाम के साथ होने पर क्या मिसाल है?
उत्तर: जब भी कोई स्थानीय वैरिएबल वैसा ही नाम होता है जैसा ग्लोबल वैरिएबल होता है, तो कंपाइलर स्थानीय वेरिएबल को पूर्वता देता है।
उदाहरण:
#include int globalVar = 2; int main() { int globalVar = 5; cout<उपरोक्त कोड का आउटपुट है 5. यह इसलिए है, हालांकि दोनों चर का एक ही नाम है, संकलक ने स्थानीय दायरे को वरीयता दी है।
Q # 6) जब एक ही नाम के साथ एक वैश्विक चर और स्थानीय चर होते हैं, तो आप वैश्विक चर का उपयोग कैसे करेंगे?
उत्तर: जब एक ही नाम के साथ दो चर होते हैं, लेकिन अलग-अलग गुंजाइश होती है, यानी एक स्थानीय चर होता है और दूसरा एक वैश्विक चर होता है, तो संकलक एक स्थानीय चर को वरीयता देगा।
वैश्विक चर का उपयोग करने के लिए, हम 'का उपयोग करते हैं गुंजाइश रिज़ॉल्यूशन ऑपरेटर: (:) ”। इस ऑपरेटर का उपयोग करके, हम वैश्विक चर के मूल्य तक पहुंच सकते हैं।
उदाहरण:
#include int x= 10; int main() { int x= 2; cout<<”Global Variable x = “<<::x; cout<<”
local Variable x= “< आउटपुट:
वैश्विक चर x = 10
स्थानीय चर x = 2
Q # 7) कॉन्स्टेंट के साथ इंट को इनिशियलाइज़ करने के कितने तरीके हैं?
उत्तर: इसके दो तरीके हैं:
- पहला प्रारूप पारंपरिक सी संकेतन का उपयोग करता है।
int result = 10; - दूसरा प्रारूप कंस्ट्रक्टर नोटेशन का उपयोग करता है।
int परिणाम (10);
स्थिरांक
Q # 8) एक निरंतर क्या है? एक उदाहरण से समझाएं।
उत्तर: एक स्थिर एक अभिव्यक्ति है जिसका एक निश्चित मूल्य है। उन्हें अपने डेटा प्रकार के आधार पर पूर्णांक, दशमलव, फ्लोटिंग-पॉइंट, चरित्र या स्ट्रिंग स्थिरांक में विभाजित किया जा सकता है।
दशमलव के अलावा, C ++ दो और स्थिरांक यानी ऑक्टल (बेस 8 तक) और हेक्साडेसिमल (बेस 16 तक) स्थिरांक का भी समर्थन करता है।
स्थिरांक के उदाहरण:
- 75 // पूर्णांक (दशमलव)
- 0113 // अष्टक
- 0x4b // हेक्साडेसिमल
- 3.142 // फ्लोटिंग पॉइंट
- ‘C '// चरित्र स्थिर
- 'नमस्ते, विश्व' // स्ट्रिंग स्थिर
ध्यान दें: जब हमें किसी एकल चरित्र का प्रतिनिधित्व करना होता है, तो हम एकल उद्धरणों का उपयोग करते हैं और जब हम एक से अधिक वर्णों के साथ एक स्थिरांक को परिभाषित करना चाहते हैं, तो हम दोहरे उद्धरण चिह्नों का उपयोग करते हैं।
Q # 9) आप C ++ में स्थिरांक को कैसे परिभाषित / घोषित करते हैं?
उत्तर: C ++ में, हम अपने स्वयं के स्थिरांक को परिभाषित कर सकते हैं # डेफिन प्रक्रमण करने से पहले के निर्देश।
#define पहचानकर्ता मान
उदाहरण:
#include #define PI 3.142 int main () { float radius =5, area; area = PI * r * r; cout<<”Area of a Circle = “< आउटपुट: एक वृत्त का क्षेत्रफल = 78.55
जैसा कि उपरोक्त उदाहरण में दिखाया गया है, एक बार जब हम #define निर्देश का उपयोग करते हुए एक निरंतर परिभाषित करते हैं, तो हम इसे पूरे कार्यक्रम में उपयोग कर सकते हैं और इसके मूल्य को प्रतिस्थापित कर सकते हैं।
हम C ++ में स्थिरांक की घोषणा कर सकते हैं ' स्थिरांक ”कीवर्ड। यह तरीका एक वैरिएबल घोषित करने के समान है, लेकिन एक कास्ट प्रीफिक्स के साथ।
एक स्थिर घोषित करने के उदाहरण
const int pi = 3.142;
const char c = 'sth';
const zipcode = 411014;
उपरोक्त उदाहरणों में, जब भी किसी स्थिरांक का प्रकार निर्दिष्ट नहीं किया जाता है, तो C ++ कंपाइलर इसे पूर्णांक प्रकार में परिभाषित करता है।
ऑपरेटर्स
प्रश्न # 10) C ++ में असाइनमेंट ऑपरेटर पर टिप्पणी।
उत्तर: C ++ में असाइनमेंट ऑपरेटर का उपयोग किसी अन्य वैरिएबल के मान को असाइन करने के लिए किया जाता है।
a = 5;
कोड की यह पंक्ति पूर्णांक मान प्रदान करती है ५ चर करने के लिए सेवा मेरे ।
= ऑपरेटर के बाईं ओर का भाग a के रूप में जाना जाता है लवलीन (बाएं मान) और दाईं ओर व्याकुलता (सही मूल्य)। एल मूल्य हमेशा एक चर होना चाहिए जबकि दाईं ओर एक स्थिर, एक चर, एक ऑपरेशन या उनमें से किसी भी संयोजन का परिणाम हो सकता है।
असाइनमेंट ऑपरेशन हमेशा दाएं से बाएं और कभी उलटा नहीं होता है।
एक गुण जो अन्य प्रोग्रामिंग भाषाओं में C ++ है, वह है कि असाइनमेंट ऑपरेटर का उपयोग किया जा सकता है व्याकुलता (या का एक हिस्सा व्याकुलता ) एक और असाइनमेंट के लिए।
उदाहरण:
a = 2 + (b = 5);
के बराबर है:
बी = 5;
a = 2 + b;
जिसका मतलब है, पहले असाइन करें ५ चर करने के लिए ख और फिर असाइन करें सेवा मेरे, मूल्य दो प्लस पिछले अभिव्यक्ति का परिणाम है ख (कि 5 है), पत्तियों सेवा मेरे के अंतिम मूल्य के साथ । ।
इस प्रकार, C ++ में निम्न अभिव्यक्ति भी मान्य है:
a = b = c = 5;
5 चर को असाइन करें सेवा मेरे , ख तथा सी ।
Q # 11) (==) और असाइनमेंट ऑपरेटर (=) के बराबर क्या अंतर है?
उत्तर: C ++ में, (==) के बराबर और असाइनमेंट ऑपरेटर (=) दो पूरी तरह से अलग ऑपरेटर हैं।
बराबर (==) एक समानता संबंध ऑपरेटर है जो दो अभिव्यक्तियों का मूल्यांकन करता है यह देखने के लिए कि क्या वे समान हैं और यदि वे समान नहीं हैं और झूठे हैं तो सही है।
असाइनमेंट ऑपरेटर (=) का उपयोग किसी वैरिएबल को मान देने के लिए किया जाता है। इसलिए, हम मूल्यांकन के लिए समानता रिलेशनल ऑपरेटर के अंदर एक जटिल असाइनमेंट ऑपरेशन कर सकते हैं।
Q # 12) C ++ में विभिन्न अंकगणितीय ऑपरेटर क्या हैं?
उत्तर: C ++ निम्नलिखित अंकगणितीय ऑपरेटरों का समर्थन करता है:
- + जोड़
- - घटाव
- * गुणा
- / विभाजन
- % मापांक
कोड के निम्नलिखित टुकड़े के साथ विभिन्न अंकगणितीय ऑपरेटरों को प्रदर्शित करते हैं।
उदाहरण:
#include int main () { int a=5, b=3; cout<<”a + b = “< उत्पादन :
a + b = 8
ए - बी = २
ए * बी = १५
a / b = 2
अ% ब = १
जैसा कि ऊपर दिखाया गया है, अन्य सभी ऑपरेशन सीधे हैं और वास्तविक अंकगणितीय संचालन के समान हैं, सिवाय मॉडुलो ऑपरेटर के जो काफी अलग है। मोडुलो ऑपरेटर एक और बी को विभाजित करता है और ऑपरेशन का परिणाम विभाजन का शेष है।
Q # 13) C ++ में विभिन्न यौगिक असाइनमेंट ऑपरेटर कौन से हैं?
उत्तर: C ++ में कंपाउंड असाइनमेंट ऑपरेटर निम्नलिखित हैं:
+ =, - =, * =, / =,% =, >> =,<<=, &=, ^=,|=
कंपाउंड असाइनमेंट ऑपरेटर C ++ भाषा की सबसे महत्वपूर्ण विशेषताओं में से एक है जो हमें एक बुनियादी ऑपरेटर के साथ एक चर के मूल्य को बदलने की अनुमति देता है:
उदाहरण:
value += increase; is equivalent to value = value + increase; if base_salary is a variable of type int. int base_salary = 1000; base_salary += 1000; #base_salary = base_salary + 1000 base_salary *= 5; #base_salary = base_salary * 5;
Q # 14) प्री और पोस्ट इन्क्रीमेंट / डिक्रीमेंट ऑपरेशंस के बीच अंतर बताएं।
उत्तर: C ++ दो ऑपरेटरों यानी ++ (वेतन वृद्धि) और - (वेतन वृद्धि) की अनुमति देता है, जो आपको एक चर के मौजूदा मूल्य में 1 जोड़ने और 1 को क्रमशः चर से घटाते हैं। ये ऑपरेटर बदले में, वेतन वृद्धि (++) और गिरावट (-) कहलाते हैं।
उदाहरण:
a = 5;
ए ++;
दूसरा कथन, a ++, के कारण 1 को a के मान में जोड़ा जाएगा। इस प्रकार एक ++ के बराबर है
a = a + 1; या
ए + = 1;
इन ऑपरेटरों की एक अनूठी विशेषता यह है कि हम इन ऑपरेटरों को चर के साथ उपसर्ग या प्रत्यय कर सकते हैं। इसलिए, यदि कोई चर है और हम वृद्धि ऑपरेटर को उपसर्ग करते हैं तो यह होगा
++ a;
इसे प्री-इन्क्रीमेंट कहा जाता है। इसी तरह, हमारे पास भी पूर्व में कमी है।
यदि हम एक वृद्धि ऑपरेटर के साथ चर को उपसर्ग करते हैं, तो हमारे पास होगा,
ए ++;
यह पोस्ट-इन्क्रीमेंट है। इसी तरह, हमारे पास पदावनति भी है।
पूर्व और बाद के अर्थ के बीच का अंतर इस बात पर निर्भर करता है कि अभिव्यक्ति का मूल्यांकन कैसे किया जाता है और परिणाम संग्रहीत किया जाता है।
प्री-इन्क्रीमेंट / डीक्रीमेंट ऑपरेटर के मामले में, वेतन वृद्धि / अपघटन ऑपरेशन पहले किया जाता है और फिर परिणाम एक अंतराल के लिए पारित किया जाता है। जबकि पोस्ट-इन्क्रीमेंट / डीक्रीमेंट ऑपरेशंस के लिए, लैवल्यू का पहले मूल्यांकन किया जाता है और फिर उसी हिसाब से इंक्रीमेंट / डीक्रीमेंट किया जाता है।
उदाहरण:
a = 5; बी = 6;
++ a; # ए = 6
बी -; # बी = 6
-ए; # a = 5
बी ++; # 6
मैं / ओ कंसोल के माध्यम से
Q # 15) C ++ में एक्सट्रैक्शन और इंसर्शन ऑपरेटर क्या हैं? उदाहरण सहित स्पष्ट कीजिए।
उत्तर: C ++ की iostream.h लाइब्रेरी में, चीन , तथा लागत दो डेटा स्ट्रीम हैं जो क्रमशः इनपुट और आउटपुट के लिए उपयोग की जाती हैं। कॉउट को आमतौर पर स्क्रीन पर निर्देशित किया जाता है और कीबोर्ड को सौंपा जाता है।
'सिने' (निष्कर्षण ऑपरेटर): सिनेमा स्ट्रीम के साथ ओवरलोड ऑपरेटर >> का उपयोग करके, C ++ मानक इनपुट को संभालता है।
int age; cin>>age;
जैसा कि ऊपर दिए गए उदाहरण में दिखाया गया है, एक पूर्णांक चर 'आयु' घोषित किया गया है और फिर यह डेटा दर्ज करने के लिए सिने (कीबोर्ड) की प्रतीक्षा करता है। “Cin” इनपुट तभी प्रोसेस करता है जब RETURN कुंजी को दबाया जाता है।
'कटआउट' (प्रविष्टि ऑपरेटर): यह अतिभारित के साथ संयोजन में उपयोग किया जाता है<< operator. It directs the data that followed it into the cout stream.
उदाहरण:
Android के लिए मुफ्त एमपी 3 गाने डाउनलोड एप्लिकेशन
cout<<”Hello, World!”; cout<<123;
नियंत्रण संरचनाएं और कार्य
नियंत्रण संरचनाएं और लूप्स
Q # 16) लूप करते समय और करते समय क्या अंतर है? उदाहरण सहित स्पष्ट कीजिए।
उत्तर: C ++ में लूप का प्रारूप है:
जबकि (अभिव्यक्ति)
{कथन;}
जब तक दिए गए स्टेटमेंट ब्लॉक को तब तक निष्पादित किया जाता है जब तक कि दी गई अभिव्यक्ति में स्थिति सही है।
उदाहरण:
#include int main() { int n; cout<>n; while(n>0) { cout<<” “<उपरोक्त कोड में, यदि n 0. है तो लूप सीधे बाहर निकल जाएगा। इस प्रकार लूप की शुरुआत में, समाप्ति की स्थिति लूप की शुरुआत में होती है और यदि यह पूरी हो जाती है, तो लूप का कोई पुनरावृत्तियों निष्पादित नहीं होता है।
अगला, हम करते समय लूप पर विचार करते हैं।
सामान्य समय का प्रारूप है:
do {कथन;} जबकि (स्थिति);
उदाहरण:
#include int main() { int n; cout<>n; do { cout<उपरोक्त कोड में, हम देख सकते हैं कि लूप के अंदर के स्टेटमेंट को कम से कम एक बार निष्पादित किया जाता है क्योंकि लूप की स्थिति अंत में है। ये कुछ समय के दौरान और कब के बीच मुख्य अंतर हैं।
जबकि लूप के मामले में, हम शुरुआत में सीधे लूप से बाहर निकल सकते हैं, अगर हालत पूरी नहीं हुई है जबकि डो-जबकि लूप में हम लूप स्टेटमेंट को कम से कम एक बार निष्पादित करते हैं।
कार्यों
Q # 17) 'शून्य' रिटर्न प्रकार से आपका क्या तात्पर्य है?
उत्तर: सभी कार्यों को सामान्य सिंटैक्स के अनुसार एक मूल्य वापस करना चाहिए।
हालाँकि, यदि हम किसी भी मूल्य को वापस करने के लिए कोई फ़ंक्शन नहीं चाहते हैं, तो हम इसका उपयोग करते हैं शून्य “यह संकेत करने के लिए। इसका मतलब है कि हम “ शून्य 'यह दर्शाने के लिए कि फ़ंक्शन का कोई रिटर्न मान नहीं है या यह रिटर्न' शून्य ”।
उदाहरण:
void myfunc() { Cout<<”Hello,This is my function!!”; } int main() { myfunc(); return 0; }
Q # 18) संदर्भ द्वारा मान और दर्रा समझाइए।
उत्तर: 'मान से पास' फ़ंक्शन का उपयोग करते हुए मापदंडों को पास करते समय, हम फ़ंक्शन के मापदंडों की एक प्रति पास करते हैं।
इसलिए, कॉल किए गए फ़ंक्शन में मापदंडों के लिए जो भी संशोधन किए जाते हैं, उन्हें कॉलिंग फ़ंक्शन में वापस नहीं भेजा जाता है। इस प्रकार कॉलिंग फ़ंक्शन में चर अपरिवर्तित रहते हैं।
उदाहरण:
void printFunc(int a,int b,int c) { a *=2; b *=2; c *=2; } int main() { int x = 1,y=3,z=4; printFunc(x,y,z); cout<<”x = “< आउटपुट:
x = 1
य = ३
z = 4
जैसा कि ऊपर देखा गया है, हालांकि पैरामीटर को फ़ंक्शन में बदल दिया गया था, उनके मान कॉलिंग फ़ंक्शन में परिलक्षित नहीं होते थे क्योंकि वे मूल्य द्वारा पारित किए गए थे।
हालाँकि, यदि हम फ़ंक्शन से कॉलिंग फ़ंक्शन पर बदले हुए मान प्राप्त करना चाहते हैं, तो हम 'संदर्भ द्वारा पास' तकनीक का उपयोग करते हैं।
इसे प्रदर्शित करने के लिए हम उपरोक्त कार्यक्रम को निम्न प्रकार से संशोधित करते हैं:
void printFunc(int& a,int& b,int& c) { a *=2; b *=2; c *=2; } int main() { int x = 1,y=3,z=4; printFunc(x,y,z); cout<<”x = “< आउटपुट:
x = 2
य = ६
z = 8
जैसा कि ऊपर दिखाया गया है, कॉल किए गए फ़ंक्शन में मापदंडों के लिए किए गए संशोधनों को कॉलिंग फ़ंक्शन को पास किया जाता है जब हम 'संदर्भ द्वारा पास' तकनीक का उपयोग करते हैं। ऐसा इसलिए है क्योंकि इस तकनीक का उपयोग करते हुए हम मापदंडों की एक प्रति नहीं देते हैं लेकिन हम वास्तव में चर के संदर्भ को ही पास करते हैं।
Q # 19) डिफ़ॉल्ट पैरामीटर क्या हैं? C ++ फ़ंक्शन में उनका मूल्यांकन कैसे किया जाता है?
उत्तर: डिफ़ॉल्ट पैरामीटर एक मान है जो फ़ंक्शन की घोषणा करते समय प्रत्येक पैरामीटर को सौंपा जाता है।
इस मान का उपयोग किया जाता है यदि फ़ंक्शन में कॉल करते समय वह पैरामीटर रिक्त रहता है। किसी विशेष पैरामीटर के लिए एक डिफ़ॉल्ट मान निर्दिष्ट करने के लिए, हम केवल फ़ंक्शन घोषणा में पैरामीटर के लिए एक मान निर्दिष्ट करते हैं।
यदि फ़ंक्शन कॉल के दौरान इस पैरामीटर के लिए मान पारित नहीं किया जाता है, तो कंपाइलर प्रदान किए गए डिफ़ॉल्ट मान का उपयोग करता है। यदि कोई मान निर्दिष्ट किया जाता है, तो इस डिफ़ॉल्ट मान को आगे बढ़ाया जाता है और पारित मूल्य का उपयोग किया जाता है।
उदाहरण:
int multiply(int a, int b=2) { int r; r = a * b; return r; } int main() { Cout< आउटपुट:
१२
६
जैसा कि ऊपर दिए गए कोड में दिखाया गया है, फ़ंक्शन को गुणा करने के लिए दो कॉल हैं। पहली कॉल में, केवल एक पैरामीटर एक मान के साथ पारित किया जाता है। इस स्थिति में, दूसरा पैरामीटर प्रदान किया गया डिफ़ॉल्ट मान है। लेकिन दूसरी कॉल में, जैसा कि दोनों पैरामीटर मान पारित किए जाते हैं, डिफ़ॉल्ट मान ओवरराइड होता है और पारित मूल्य का उपयोग किया जाता है।
Q # 20) C ++ में एक इनलाइन फ़ंक्शन क्या है?
उत्तर: इनलाइन फ़ंक्शन एक फ़ंक्शन है जिसे कंपाइलर द्वारा फ़ंक्शन को कॉल करने के बिंदु के रूप में संकलित किया जाता है और उस बिंदु पर कोड प्रतिस्थापित किया जाता है। इससे संकलन तेजी से होता है। यह फ़ंक्शन 'इनलाइन' कीवर्ड के साथ फ़ंक्शन प्रोटोटाइप को प्रीफ़िक्स करके परिभाषित किया गया है।
ऐसे कार्य केवल तभी फायदेमंद होते हैं जब इनलाइन फ़ंक्शन का कोड छोटा और सरल होता है। हालांकि एक फ़ंक्शन को इनलाइन के रूप में परिभाषित किया गया है, यह पूरी तरह से संकलक है कि यह इनलाइन के रूप में मूल्यांकन करने के लिए निर्भर है या नहीं।
उन्नत-डेटा संरचना
सरणियों
Q # 21) आमतौर पर लूप के लिए ऐरे को क्यों संसाधित किया जाता है?
उत्तर: एरे अपने प्रत्येक तत्व को पार करने के लिए इंडेक्स का उपयोग करता है।
यदि A एक सरणी है तो इसके प्रत्येक तत्व को A (i) के रूप में एक्सेस किया जाता है। प्रोग्रामेटिक रूप से, इसके लिए काम करने के लिए आवश्यक सभी लूप वैरिएबल के साथ चलने वाला एक ब्लॉक है, जो 0 से A.length-1 के सूचकांक (काउंटर) के रूप में कार्य करता है।
यह वही है जो एक लूप करता है और यही कारण है कि हम लूप के लिए एरे को प्रोसेस करते हैं।
क्यू # 22) हटाएं और हटाएं () के बीच अंतर बताएं।
उत्तर: 'डिलीट ()' का उपयोग एक एरे को आवंटित मेमोरी को रिलीज करने के लिए किया जाता है जिसे नए () का उपयोग करके आवंटित किया गया था। 'डिलीट' का उपयोग मेमोरी का एक हिस्सा जारी करने के लिए किया जाता है जिसे नए का उपयोग करके आवंटित किया गया था।
Q # 23) इस कोड में क्या गलत है?
टी * पी = नया टी (10);
हटाएं p;
उत्तर: उपरोक्त कोड वाक्य-रचना सही है और ठीक संकलन करेगा।
एकमात्र समस्या यह है कि यह केवल सरणी के पहले तत्व को हटा देगा। हालांकि पूरी सरणी हटा दी गई है, केवल पहले तत्व का विनाशकर्ता कहा जाएगा और पहले तत्व के लिए मेमोरी जारी की गई है।
Q # 24) किसी सरणी में वस्तुओं को नष्ट करने का क्या क्रम है?
उत्तर: एक सरणी में वस्तुओं को निर्माण के रिवर्स ऑर्डर में नष्ट कर दिया जाता है: पहला निर्माण, अंतिम विनाशकारी।
निम्नलिखित उदाहरण में, विध्वंसक के लिए आदेश (9), (8),…, (1), (0) होगा:
voiduserCode() { Car a(10); ... }
संकेत
Q # 25) इस कोड में क्या गलत है?
टी * पी = 0;
हटाएं p;
उत्तर: उपरोक्त कोड में, सूचक एक अशक्त सूचक है। C ++ 03 मानक के अनुसार, NULL पॉइंटर पर कॉल हटाना पूरी तरह से वैध है। डिलीट ऑपरेटर आंतरिक रूप से NULL चेक की देखभाल करेगा।
Q # 26) C ++ में एक रेफरेंस वेरिएबल क्या है?
उत्तर: एक संदर्भ चर मौजूदा चर के लिए एक उपनाम नाम है। इसका मतलब है कि चर नाम और संदर्भ चर दोनों एक ही मेमोरी स्थान पर इंगित करते हैं। इसलिए, जब भी चर अद्यतन किया जाता है, तो संदर्भ भी अद्यतन किया जाता है।
उदाहरण:
int a=10; int& b = a;
यहाँ, बी एक का संदर्भ है।
भंडारण कक्षाएं
Q # 27) स्टोरेज क्लास क्या है? C ++ में स्टोरेज क्लासेस का उल्लेख करें।
उत्तर: संग्रहण वर्ग चर या कार्यों जैसे प्रतीकों का जीवन या दायरा निर्धारित करता है।
C ++ निम्नलिखित संग्रहण वर्गों का समर्थन करता है:
- ऑटो
- स्थिर
- बाहरी
- रजिस्टर करें
- परिवर्तनशील
Q # 28) म्यूटेबल स्टोरेज क्लास स्पेसियर की व्याख्या करें।
उत्तर: किसी स्थिर वर्ग ऑब्जेक्ट के सदस्य का चर नहीं बदला जा सकता है। हालाँकि, चर को 'परिवर्तनशील' घोषित करके, हम इन चर के मूल्यों को बदल सकते हैं।
Q # 29) कीवर्ड ऑटो किसके लिए है?
उत्तर: डिफ़ॉल्ट रूप से, फ़ंक्शन का प्रत्येक स्थानीय चर स्वचालित है यानी ऑटो । नीचे दिए गए फ़ंक्शन में दोनों चर 'i' और 'j' स्वचालित चर हैं।
void f() { int i; auto int j; }
ध्यान दें : एक वैश्विक चर एक स्वचालित चर नहीं है।
Q # 30) स्टेटिक वेरिएबल क्या है?
उत्तर: स्टैटिक वेरिएबल एक स्थानीय वैरिएबल है, जो फंक्शन कॉल्स में अपनी वैल्यू बरकरार रखता है। स्टेटिक चर 'स्थिर' कीवर्ड का उपयोग करके घोषित किए जाते हैं। न्यूमेरिक वैरिएबल जो स्टैटिक होते हैं उनका डिफ़ॉल्ट मान शून्य होता है।
यदि निम्न को तीन बार कहा जाता है, तो निम्न फ़ंक्शन 1 2 3 प्रिंट करेगा।
void f() { static int i; ++i; printf(“%d “,i); }
यदि एक वैश्विक चर स्थिर है, तो इसकी दृश्यता समान स्रोत कोड तक सीमित है।
Q # 31) एक्सटर्नल स्टोरेज स्पेसिफायर का उद्देश्य क्या है?
उत्तर: 'बाह्य' विनिर्देशक का उपयोग वैश्विक प्रतीक के दायरे को हल करने के लिए किया जाता है।
#include using nam espace std; main() { extern int i; cout< उपरोक्त कोड में, 'i' उस फ़ाइल के बाहर दिखाई दे सकता है जहाँ इसे परिभाषित किया गया है।
Q # 32) रजिस्टर स्टोरेज स्पेसिफायर की व्याख्या करें।
उत्तर: जब भी चर का उपयोग किया जाता है तो “रजिस्टर” चर का उपयोग किया जाना चाहिए। जब एक चर को 'रजिस्टर' विनिर्देशक के साथ घोषित किया जाता है, तो संकलक सीपीयू को चर के लुकअप को तेज करने के लिए अपने भंडारण के लिए रजिस्टर देता है।
Q # 33) किसी फ़ंक्शन में 'कॉन्स्ट' संदर्भ तर्कों का उपयोग कब करें?
उत्तर: किसी फ़ंक्शन में 'कॉन्स्ट' संदर्भ तर्कों का उपयोग करना कई मायनों में फायदेमंद है:
- 'कॉन्स्ट' प्रोग्रामिंग त्रुटियों से बचाता है जो डेटा को बदल सकता है।
- 'कॉन्स्ट' का उपयोग करने के परिणामस्वरूप, फ़ंक्शन कॉन्स्ट और नॉन-कॉस्ट वास्तविक तर्क दोनों को संसाधित करने में सक्षम है, जो 'कॉन्स्ट' का उपयोग नहीं होने पर संभव नहीं है।
- एक कास्ट संदर्भ का उपयोग करने से फ़ंक्शन को उपयुक्त तरीके से एक अस्थायी चर उत्पन्न और उपयोग करने की अनुमति मिलेगी।
संरचना और उपयोगकर्ता-परिभाषित डेटा प्रकार
Q # 34) क्लास क्या है?
उत्तर: कक्षा C ++ में एक उपयोगकर्ता-परिभाषित डेटा प्रकार है। यह एक विशेष प्रकार की समस्या को हल करने के लिए बनाया जा सकता है। निर्माण के बाद, उपयोगकर्ता को किसी कक्षा के कामकाज का विवरण जानने की आवश्यकता नहीं है।
सामान्य तौर पर, वर्ग एक परियोजना के खाके के रूप में कार्य करता है और इन मापदंडों पर संचालित विभिन्न मापदंडों और कार्यों या कार्यों में शामिल हो सकता है। इन्हें कक्षा का सदस्य कहा जाता है।
क्यू # 35) वर्ग और संरचना के बीच अंतर।
उत्तर:
संरचना: सी भाषा में, संरचना का उपयोग विभिन्न प्रकार के डेटा प्रकारों को एक साथ बंडल करने के लिए किया जाता है। किसी संरचना के अंदर के चरों को संरचना का सदस्य कहा जाता है। ये सदस्य डिफ़ॉल्ट रूप से सार्वजनिक होते हैं और इन्हें संरचना नाम का उपयोग करके और उसके बाद सदस्य नाम से पहुँचा जा सकता है।
वर्ग: वर्ग संरचना का उत्तराधिकारी है। C ++ अपने सदस्यों पर कार्य करने वाले कार्यों को शामिल करने के लिए संरचना की परिभाषा का विस्तार करता है। डिफ़ॉल्ट रूप से वर्ग के अंदर सभी सदस्य निजी हैं।
C ++ के साथ ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग
क्लासेस, कंस्ट्रक्टर्स, डिस्ट्रक्टर्स
Q # 36) नेमस्पेस क्या है?
उत्तर: नेमस्पेस हमें एक विशिष्ट नाम के तहत वैश्विक कक्षाओं, वस्तुओं और / या कार्यों के एक समूह का समूह बनाने की अनुमति देता है।
नामस्थान का उपयोग करने के लिए सामान्य रूप है:
नाम स्थान पहचानकर्ता {नाम स्थान-निकाय}
जहाँ पहचानकर्ता कोई भी मान्य पहचानकर्ता है और नामस्थान-निकाय वर्गों, वस्तुओं और कार्यों का समूह है जो नामस्थान के भीतर शामिल हैं। नामस्थान विशेष रूप से उस मामले में उपयोगी होते हैं जहां एक से अधिक ऑब्जेक्ट के लिए एक ही नाम होने की संभावना होती है, जिसके परिणामस्वरूप नाम की झड़प होती है।
Q # 37) 'घोषणा' का उपयोग करने का क्या मतलब है?
दुनिया का सबसे अच्छा कंप्यूटर हैकिंग सॉफ्टवेयर मुफ्त डाउनलोड
उत्तर: घोषणा-पत्र का उपयोग गुंजाइश रिज़ॉल्यूशन ऑपरेटर के बिना नामस्थान से एक नाम को संदर्भित करने के लिए किया जाता है।
Q # 38) नाम मंगलिंग क्या है?
उत्तर: C ++ कंपाइलर एक अद्वितीय नाम में फ़ंक्शन / विधि के साथ पैरामीटर प्रकारों को एन्कोड करता है। इस प्रक्रिया को नाम मैनलिंग कहा जाता है। उलटा प्रक्रिया को डीमंग्लिंग कहा जाता है।
उदाहरण:
ए :: बी (इंट, लॉन्ग) कांस्ट के रूप में मंगाई गई है ‘B__C3Ail ' ।
एक कंस्ट्रक्टर के लिए, विधि नाम छोड़ दिया जाता है।
अर्थात् A :: A (इंट, लॉन्ग) कांस्ट के रूप में मंगाई गई है 'C3Ail'।
Q # 39) ऑब्जेक्ट और क्लास के बीच क्या अंतर है?
उत्तर: क्लास एक प्रोजेक्ट या समस्या का एक ब्लूप्रिंट है जिसे हल किया जाना है और जिसमें चर और विधियां शामिल हैं। इन्हें कक्षा का सदस्य कहा जाता है। जब तक उन्हें स्थिर घोषित नहीं किया जाता है तब तक हम अपने तरीके से कक्षा के तरीकों या चर तक नहीं पहुँच सकते हैं।
कक्षा के सदस्यों तक पहुँचने और उन्हें उपयोग करने के लिए रखने के लिए, हमें एक वर्ग का एक उदाहरण बनाना चाहिए जिसे ऑब्जेक्ट कहा जाता है। वर्ग का असीमित जीवनकाल होता है जबकि किसी वस्तु का सीमित जीवनकाल होता है।
Q # 40) C ++ में विभिन्न एक्सेस स्पेसिफिकर्स क्या हैं?
उत्तर: C ++ निम्नलिखित पहुँच निर्दिष्टकों का समर्थन करता है:
- जनता: डेटा सदस्य और फ़ंक्शन कक्षा के बाहर पहुंच योग्य हैं।
- निजी: डेटा सदस्य और फ़ंक्शन कक्षा के बाहर पहुंच योग्य नहीं हैं। अपवाद एक मित्र वर्ग का उपयोग है।
- संरक्षित: डेटा सदस्य और फ़ंक्शंस केवल व्युत्पन्न वर्गों तक ही पहुँच योग्य हैं।
उदाहरण:
अपने अंतर के साथ निजी, संरक्षित और सार्वजनिक वर्णन करें और उदाहरण दें।
class A{ int x; int y; public int a; protected bool flag; public A() : x(0) , y(0) {} //default (no argument) constructor }; main(){ A MyObj; MyObj.x = 5; // Compiler will issue a ERROR as x is private int x = MyObj.x; // Compiler will issue a compile ERROR MyObj.x is private MyObj.a = 10; // no problem; a is public member int col = MyObj.a; // no problem MyObj.flag = true; // Compiler will issue a ERROR; protected values are read only bool isFlag = MyObj.flag; // no problem
Q # 41) कंस्ट्रक्टर क्या है और इसे कैसे कहा जाता है?
उत्तर: कंस्ट्रक्टर वर्ग का एक सदस्य कार्य है जिसका वर्ग के समान नाम है। इसका उपयोग मुख्य रूप से वर्ग के सदस्यों को शुरू करने के लिए किया जाता है। डिफ़ॉल्ट रूप से निर्माता सार्वजनिक होते हैं।
ऐसे दो तरीके हैं, जिनमें निर्माणकर्ताओं को बुलाया जाता है:
- तत्क्षण: जब कक्षा का एक ऑब्जेक्ट बनाया जाता है, तो संकलक को संकलक द्वारा बुलाया जाता है। यह एक स्टैक पर ऑब्जेक्ट बनाता है।
- स्पष्ट कॉलिंग: जब एक वर्ग का उद्देश्य नए का उपयोग करके बनाया जाता है, तो निर्माणकर्ताओं को स्पष्ट रूप से कहा जाता है। यह आमतौर पर एक ढेर पर एक वस्तु बनाता है।
उदाहरण:
class A{ int x; int y; public A() : x(0) , y(0) {} //default (no argument) constructor }; main() { A Myobj; // Implicit Constructor call. In order to allocate memory on stack, //the default constructor is implicitly called. A * pPoint = new A(); // Explicit Constructor call. In order to allocate //memory on HEAP we call the default constructor. }
Q # 42) एक COP CONSTRUCTOR क्या है और इसे कब कहा जाता है?
उत्तर: एक कॉपी कंस्ट्रक्टर एक कंस्ट्रक्टर है जो उसी वर्ग के ऑब्जेक्ट को अपने पैरामीटर के रूप में स्वीकार करता है और अपने डेटा सदस्यों को असाइनमेंट के बाएं हिस्से पर ऑब्जेक्ट को कॉपी करता है। यह उपयोगी है जब हमें उसी वर्ग की एक नई वस्तु का निर्माण करने की आवश्यकता होती है।
उदाहरण:
class A{ int x; int y; public int color; public A() : x(0) , y(0) {} //default (no argument) constructor public A( const A& ) ; }; A::A( const A & p ) { this->x = p.x; this->y = p.y; this->color = p.color; } main() { A Myobj; Myobj.color = 345; A Anotherobj = A( Myobj ); // now Anotherobj has color = 345 }
Q # 43) डिफॉल्ट कंस्ट्रक्टर क्या है?
उत्तर: डिफॉल्ट कंस्ट्रक्टर एक ऐसा कंस्ट्रक्टर है जिसमें या तो कोई तर्क नहीं है या यदि कोई हैं, तो ये सभी डिफॉल्ट तर्क हैं।
उदाहरण:
class B { public: B (int m = 0) : n (m) {} int n; }; int main(int argc, char *argv()) { B b; return 0; }
Q # 44) रूपांतरण कंस्ट्रक्टर क्या है?
उत्तर: यह एक निर्माता है जो एक अलग प्रकार के एक तर्क को स्वीकार करता है। रूपांतरण निर्माता मुख्य रूप से एक प्रकार से दूसरे प्रकार में परिवर्तित करने के लिए उपयोग किए जाते हैं।
Q # 45) एक्सप्लोसिव कंस्ट्रक्टर क्या है?
उत्तर: एक रूपांतरण निर्माता स्पष्ट कीवर्ड के साथ घोषित किया जाता है। संकलक प्रकारों के निहित रूपांतरण को लागू करने के लिए एक स्पष्ट निर्माणकर्ता का उपयोग नहीं करता है। इसका उद्देश्य स्पष्ट रूप से निर्माण के लिए आरक्षित है।
Q # 46) क्लास सदस्य चर के लिए स्टेटिक कीवर्ड की क्या भूमिका है?
उत्तर: स्थिर सदस्य चर संबंधित वर्ग के लिए बनाई गई सभी वस्तुओं में एक आम मेमोरी साझा करता है। हमें किसी वस्तु का उपयोग करके स्थिर सदस्य चर का संदर्भ नहीं देना चाहिए। हालाँकि, इसे क्लास नाम से ही एक्सेस किया जा सकता है।
Q # 47) स्टेटिक मेंबर फंक्शन की व्याख्या करें।
उत्तर: एक स्थिर सदस्य फ़ंक्शन केवल कक्षा के स्थिर सदस्य चर का उपयोग कर सकता है। स्थिर सदस्य चर के रूप में भी, एक स्थिर सदस्य फ़ंक्शन को वर्ग नाम का उपयोग करके भी एक्सेस किया जा सकता है।
Q # 48) स्थानीय वस्तुओं को नष्ट करने का क्या क्रम है?
उत्तर: कोड के एक टुकड़े पर विचार करें:
Class A{ …. }; int main() { A a; A b; ... }
मुख्य फ़ंक्शन में, हमारे पास दो ऑब्जेक्ट हैं जो एक के बाद एक बनाते हैं। वे क्रम में बनाए गए हैं, पहले एक बी। लेकिन जब इन वस्तुओं को हटा दिया जाता है या यदि वे दायरे से बाहर जाते हैं, तो प्रत्येक के लिए विध्वंसक को रिवर्स ऑर्डर में बुलाया जाएगा, जिसमें उनका निर्माण किया गया था।
इसलिए, बी के विनाशकर्ता को पहले बुलाया जाएगा उसके बाद ए। यहां तक कि अगर हमारे पास वस्तुओं की एक सरणी है, तो वे उनकी रचना के रिवर्स ऑर्डर में उसी तरह से नष्ट हो जाएंगे।
अधिक भार
Q # 49) फंक्शन ओवरलोडिंग और ऑपरेटर ओवरलोडिंग की व्याख्या करें।
उत्तर: C ++ OOPs अवधारणा पॉलीमॉर्फिज़्म का समर्थन करता है जिसका अर्थ है 'कई रूप'।
C ++ में हमारे पास दो प्रकार के बहुरूपता हैं, यानी संकलन-समय बहुरूपता, और रन-टाइम बहुरूपता। ओवरलोडिंग तकनीक का उपयोग करके संकलन-समय के बहुरूपता को प्राप्त किया जाता है। ओवरलोडिंग का सीधा मतलब है कि किसी इकाई को अपना आधार अर्थ बरकरार रखकर अतिरिक्त अर्थ देना।
C ++ ओवरलोडिंग के दो प्रकारों का समर्थन करता है:
ओवरलोडिंग
फंक्शन ओवरलोडिंग एक ऐसी तकनीक है जो प्रोग्रामर को एक ही नाम लेकिन अलग-अलग पैरामीटर सूची के साथ एक से अधिक फ़ंक्शन करने की अनुमति देती है। दूसरे शब्दों में, हम फ़ंक्शन को विभिन्न तर्कों के साथ अधिभारित करते हैं यानी यह तर्कों के प्रकार, तर्कों की संख्या या तर्कों का क्रम हो सकता है।
इसके वापसी प्रकार पर फ़ंक्शन ओवरलोडिंग कभी भी हासिल नहीं की जाती है।
ऑपरेटर ओवरलोडिंग:
यह अभी तक एक और प्रकार का संकलन-समय बहुरूपता है जो C ++ द्वारा समर्थित है। ऑपरेटर ओवरलोडिंग में, एक ऑपरेटर को ओवरलोड किया जाता है, ताकि यह उपयोगकर्ता-परिभाषित प्रकारों के साथ-साथ मानक डेटा प्रकार के ऑपरेंड के साथ काम कर सके। लेकिन ऐसा करते समय, उस ऑपरेटर की मानक परिभाषा को बरकरार रखा जाता है।
उदाहरण के लिए, एक संचालक ऑपरेटर (+) जो संख्यात्मक डेटा प्रकारों पर काम करता है, उसे दो ऑब्जेक्ट्स पर संचालित करने के लिए अतिभारित किया जा सकता है जैसे कि जटिल कंप्यूटर क्लास की वस्तु।
Q # 50) C ++ में मेथड ओवरलोडिंग और मेथड ओवरराइडिंग में क्या अंतर है?
उत्तर: मेथड ओवरलोडिंग में एक ही नाम से अलग-अलग तर्क सूची वाले कार्य होते हैं। यह संकलन-समय के बहुरूपता का एक रूप है।
जब हम बेस क्लास से ली गई विधि को फिर से लिखते हैं तो मेथड ओवरराइडिंग तस्वीर में आ जाती है। रन-टाइम बहुरूपता या आभासी कार्यों से निपटने के दौरान विधि ओवरराइडिंग का उपयोग किया जाता है।
Q # 51) कॉपी कंस्ट्रक्टर और एक ओवरलोडेड के बीच क्या अंतर है असाइनमेंट ऑपरेटर?
उत्तर: एक कॉपी कंस्ट्रक्टर और एक अधिभार असाइनमेंट ऑपरेटर मूल रूप से एक ही उद्देश्य की सेवा करते हैं यानी एक वस्तु की सामग्री को दूसरे को सौंपते हैं। लेकिन फिर भी, दोनों में अंतर है।
उदाहरण:
complex c1,c2; c1=c2; //this is assignment complex c3=c2; //copy constructor
उपरोक्त उदाहरण में, दूसरा कथन c1 = c2 एक अधिभार असाइनमेंट स्टेटमेंट है।
यहां, c1 और c2 दोनों पहले से ही मौजूद ऑब्जेक्ट हैं और c2 की सामग्री को ऑब्जेक्ट c1 को सौंपा गया है। इसलिए, अधिभार असाइनमेंट स्टेटमेंट के लिए दोनों ऑब्जेक्ट्स को पहले से ही बनाने की आवश्यकता है।
अगला कथन, जटिल c3 = c2 प्रतिलिपि निर्माता का एक उदाहरण है। यहां, c2 की सामग्री को एक नई वस्तु c3 को सौंपा गया है, जिसका अर्थ है कि कॉपी कंस्ट्रक्टर निष्पादित होने पर हर बार एक नई वस्तु बनाता है।
Q # 52) उन ऑपरेटरों का नाम बताइए जिन्हें ओवरलोड नहीं किया जा सकता है।
उत्तर:
- sizeof - आकारक ऑपरेटर
- । - डॉट ऑपरेटर
- । * - dereferencing संचालक
- -> - सदस्य dereferencing ऑपरेटर
- :: - गुंजाइश रिज़ॉल्यूशन ऑपरेटर
- ?: - सशर्त संचालक
Q # 53) फ़ंक्शन को पैरामीटर के आधार पर ओवरलोड किया जा सकता है जो एक मान या एक संदर्भ है। यदि कथन सत्य है तो स्पष्ट करें।
उत्तर: असत्य। दोनों, मान द्वारा पासिंग और संदर्भ द्वारा पासिंग कॉलर के समान दिखते हैं।
Q # 54) ऑपरेटर ओवरलोडिंग के क्या लाभ हैं?
उत्तर: एक कक्षा में मानक ऑपरेटरों को ओवरलोड करके, हम इन ऑपरेटरों के अर्थ को बढ़ा सकते हैं, ताकि वे अन्य उपयोगकर्ता-परिभाषित वस्तुओं पर भी काम कर सकें।
फ़ंक्शन ओवरलोडिंग हमें कोड की जटिलता को कम करने और इसे और अधिक स्पष्ट और पठनीय बनाने की अनुमति देता है क्योंकि हमारे पास विभिन्न तर्क सूचियों के साथ समान फ़ंक्शन नाम हो सकते हैं।
विरासत
Q # 55) वंशानुक्रम क्या है?
उत्तर: वंशानुक्रम एक ऐसी प्रक्रिया है जिसके द्वारा हम किसी मौजूदा इकाई की विशेषताओं को प्राप्त कर सकते हैं और इसमें अधिक सुविधाएँ जोड़कर एक नई इकाई का निर्माण कर सकते हैं।
सी ++ के संदर्भ में, विरासत एक मौजूदा वर्ग से प्राप्त करके एक नया वर्ग बना रही है ताकि इस नए वर्ग में अपने मूल वर्ग के गुणों के साथ-साथ अपने स्वयं के गुण भी हों।
Q # 56) वंशानुक्रम के क्या लाभ हैं?
उत्तर: विरासत कोड पुन: प्रयोज्य की अनुमति देता है, जिससे कोड विकास पर समय की बचत होती है।
इनहेरिट करके, हम बग-मुक्त उच्च-गुणवत्ता वाले सॉफ़्टवेयर का उपयोग करते हैं जो भविष्य की समस्याओं को कम करता है।
Q # 57) क्या C ++ मल्टीलेवल और मल्टीपल इनहेरिटेंस का समर्थन करता है?
उत्तर: हाँ।
Q # 58) मल्टीपल इनहेरिटेंस (वर्चुअल इनहेरिटेंस) क्या हैं? इसके फायदे और नुकसान क्या हैं?
उत्तर: कई विरासतों में, हमारे पास एक से अधिक आधार कक्षाएं हैं जिनसे एक व्युत्पन्न वर्ग विरासत में प्राप्त कर सकता है। इसलिए, एक व्युत्पन्न वर्ग एक से अधिक आधार वर्ग की विशेषताओं और गुणों को लेता है।
उदाहरण के लिए , एक कक्षा चालक दो आधार वर्ग होंगे, कर्मचारी और एक व्यक्ति क्योंकि एक ड्राइवर एक कर्मचारी होने के साथ-साथ एक व्यक्ति भी है। यह लाभप्रद है क्योंकि चालक वर्ग कर्मचारी के गुणों के साथ-साथ व्यक्ति वर्ग के गुण भी वारिस कर सकता है।
लेकिन एक कर्मचारी और एक व्यक्ति के मामले में, वर्ग में कुछ गुण सामान्य होंगे। हालांकि, एक अस्पष्ट स्थिति पैदा होगी क्योंकि चालक वर्ग उन कक्षाओं को नहीं जान पाएगा जिनसे सामान्य गुण विरासत में मिले। यह कई वंशानुक्रमों का प्रमुख नुकसान है।
Q # 59) आईएसए और एचएएस वर्ग संबंधों को स्पष्ट करें। आप कैसे लागू करेंगे? से प्रत्येक?
उत्तर: 'आईएसए' संबंध आमतौर पर विरासत का प्रदर्शन करता है क्योंकि इसका मतलब है कि एक वर्ग 'आईएसए' एक अन्य वर्ग का विशेष संस्करण है। उदाहरण के लिए , एक कर्मचारी ISA व्यक्ति। इसका मतलब है कि एक कर्मचारी वर्ग व्यक्ति वर्ग से विरासत में मिला है।
'ISA' के विपरीत, 'HASA' संबंध में दर्शाया गया है कि एक इकाई की एक अन्य इकाई हो सकती है क्योंकि इसके सदस्य या एक वर्ग के पास एक अन्य वस्तु होती है।
इसलिए एक कर्मचारी वर्ग का एक ही उदाहरण लेते हुए, जिस तरह से हम कर्मचारी के साथ वेतन वर्ग को जोड़ते हैं, वह उसे विरासत में नहीं मिलता है, बल्कि कर्मचारी वर्ग के अंदर वेतन वस्तु को शामिल या शामिल करके होता है। 'एचएसए' संबंध सबसे अच्छा प्रदर्शन या एकत्रीकरण द्वारा प्रदर्शित किया जाता है।
Q # 60) क्या एक व्युत्पन्न वर्ग विरासत में मिला है या विरासत में नहीं मिला है?
उत्तर: जब एक व्युत्पन्न वर्ग का निर्माण एक विशेष आधार वर्ग से किया जाता है, तो यह मूल रूप से आधार वर्ग की सभी विशेषताओं और सामान्य सदस्यों को विरासत में मिलता है। लेकिन इस नियम के कुछ अपवाद हैं। उदाहरण के लिए, एक व्युत्पन्न वर्ग को बेस क्लास के कंस्ट्रक्टर और डिस्ट्रक्टर्स विरासत में नहीं मिलते हैं।
प्रत्येक वर्ग के अपने निर्माता और विध्वंसक होते हैं। व्युत्पन्न वर्ग को आधार वर्ग और कक्षा के दोस्तों के असाइनमेंट ऑपरेटर भी नहीं मिलते हैं। कारण यह है कि ये संस्थाएँ एक विशेष वर्ग के लिए विशिष्ट हैं और यदि कोई अन्य वर्ग व्युत्पन्न है या यदि यह उस वर्ग का मित्र है, तो वे उन पर पारित नहीं हो सकते हैं।
बहुरूपता
Q # 61) बहुरूपता क्या है?
उत्तर: बहुरूपता के पीछे मूल विचार कई रूपों में है। C ++ में, हमारे पास दो प्रकार के बहुरूपता हैं:
(i) संकलन-समय बहुरूपता
संकलन-समय के बहुरूपता में, हम ओवरलोडिंग द्वारा कई रूपों को प्राप्त करते हैं। इसलिए, हमारे पास एक ऑपरेटर ओवरलोडिंग और फ़ंक्शन ओवरलोडिंग है। (हमने पहले ही इसे ऊपर कवर कर दिया है)
(ii) रन-टाइम बहुरूपता
यह वर्गों और वस्तुओं के लिए बहुरूपता है। सामान्य विचार यह है कि एक आधार वर्ग को कई वर्गों द्वारा विरासत में दिया जा सकता है। बेस क्लास पॉइंटर अपने चाइल्ड क्लास को इंगित कर सकता है और बेस क्लास एरे विभिन्न चाइल्ड क्लास ऑब्जेक्ट को स्टोर कर सकता है।
इसका मतलब है, कि एक ऑब्जेक्ट एक ही फ़ंक्शन कॉल के लिए अलग-अलग प्रतिक्रिया करता है। इस प्रकार का बहुरूपता एक आभासी फ़ंक्शन तंत्र का उपयोग कर सकता है।
Q # 62) वर्चुअल फ़ंक्शंस क्या हैं?
उत्तर: एक वर्चुअल फ़ंक्शन व्युत्पन्न वर्गों को बेस क्लास द्वारा प्रदान किए गए कार्यान्वयन को बदलने की अनुमति देता है।
जब भी हमारे पास आधार के साथ-साथ व्युत्पन्न वर्ग के समान नाम वाले कार्य होते हैं, तो एक अस्पष्टता पैदा होती है जब हम बेस क्लास पॉइंटर का उपयोग करके चाइल्ड क्लास ऑब्जेक्ट तक पहुंचने का प्रयास करते हैं। जैसा कि हम बेस क्लास पॉइंटर का उपयोग कर रहे हैं, जिस फ़ंक्शन को कहा जाता है वह उसी नाम के साथ बेस क्लास फ़ंक्शन है।
इस अस्पष्टता को ठीक करने के लिए हम बेस क्लास में फंक्शन प्रोटोटाइप से पहले 'वर्चुअल' कीवर्ड का उपयोग करते हैं। दूसरे शब्दों में, हम इस बहुरूपी कार्य को आभासी बनाते हैं। वर्चुअल फ़ंक्शन का उपयोग करके, हम अस्पष्टता को दूर कर सकते हैं और बेस क्लास पॉइंटर का उपयोग करके हम सभी चाइल्ड क्लास फ़ंक्शंस को सही तरीके से एक्सेस कर सकते हैं।
Q # 63) रन-टाइम बहुरूपता / आभासी कार्यों का एक उदाहरण दें।
उत्तर:
class SHAPE{ public virtual Draw() = 0; //abstract class with a pure virtual method }; class CIRCLE: public SHAPE{ public int r; public Draw() { this->drawCircle(0,0,r); } }; class SQUARE: public SHAPE{ public int a; public Draw() { this->drawSquare(0,0,a,a); } }; int main() { SHAPE shape1*; SHAPE shape2*; CIRCLE c1; SQUARE s1; shape1 = &c1; shape2 = &s1; coutउपरोक्त कोड में, SHAPE वर्ग का शुद्ध आभासी कार्य होता है और यह एक सार वर्ग है (इसे तत्काल नहीं किया जा सकता है)। प्रत्येक वर्ग अपने तरीके से SHAPE कार्यान्वयन ड्रा () फ़ंक्शन से प्राप्त होता है।
इसके अलावा, प्रत्येक ड्रॉ फ़ंक्शन वर्चुअल होता है ताकि जब हम व्युत्पन्न कक्षाओं (सर्कल और स्क्वेयर) के ऑब्जेक्ट के साथ हर बार बेस क्लास (SHAPE) पॉइंटर का उपयोग करें, तो उपयुक्त ड्रा फ़ंक्शन कहा जाता है।
Q # 64) प्योर वर्चुअल फंक्शन्स से आपका क्या अभिप्राय है?
उत्तर: एक शुद्ध आभासी सदस्य फ़ंक्शन एक सदस्य फ़ंक्शन है जिसमें आधार वर्ग व्युत्पन्न वर्गों को ओवरराइड करने के लिए मजबूर करता है। आम तौर पर इस सदस्य समारोह का कोई कार्यान्वयन नहीं होता है। शुद्ध आभासी फ़ंक्शंस शून्य के बराबर हैं।
उदाहरण:
class Shape { public: virtual void draw() = 0; };
बेस क्लास जिसका एक शुद्ध आभासी कार्य है, जिसके सदस्य को 'सार वर्ग' कहा जा सकता है। इस वर्ग को त्वरित नहीं किया जा सकता है और यह आमतौर पर एक खाका के रूप में कार्य करता है जिसमें आगे कार्यान्वयन के साथ कई उप-वर्ग होते हैं।
Q # 65) वर्चुअल कंस्ट्रक्टर / डिस्ट्रक्टर्स क्या हैं?
उत्तर:
वर्चुअल विध्वंसक: जब हम किसी बेस क्लास पॉइंटर का उपयोग किसी व्युत्पन्न क्लास ऑब्जेक्ट की ओर करते हैं और इसे नष्ट करने के लिए उपयोग करते हैं, तो व्युत्पन्न क्लास डिस्ट्रक्टर को कॉल करने के बजाय, बेस क्लास डिस्ट्रक्टर को कहा जाता है।
उदाहरण:
Class A{ …. ~A(); }; Class B:publicA{ … ~B(); }; B b; A a = &b; delete a;
जैसा कि ऊपर दिए गए उदाहरण में दिखाया गया है, जब हम कहते हैं कि डिलीट ए, डिस्ट्रक्टर को कहा जाता है लेकिन यह वास्तव में बेस क्लास डिस्ट्रक्टर है। यह अस्पष्टता को जन्म देता है कि बी द्वारा रखी गई सभी मेमोरी को ठीक से साफ़ नहीं किया जाएगा।
'वर्चुअल डिस्ट्रक्टर' अवधारणा का उपयोग करके इस समस्या को हल किया जा सकता है।
हम क्या करते हैं, हम बेस क्लास कंस्ट्रक्टर को 'वर्चुअल' बनाते हैं ताकि सभी चाइल्ड क्लास डिस्ट्रक्टर्स भी वर्चुअल हो जाएं और जब हम बेस क्लास की ऑब्जेक्ट को डिलीट किए गए ऑब्जेक्ट के ऑब्जेक्ट की ओर इशारा करते हुए डिलीट करते हैं, तो उपयुक्त डिस्ट्रक्टर कहते हैं और सभी ऑब्जेक्ट ठीक से हटा दिए गए हैं।
इसे निम्नानुसार दिखाया गया है:
साबुन और आराम पर साक्षात्कार प्रश्न
Class A{ …. virtual ~A(); }; Class B:publicA{ … ~B(); }; B b; A a = &b; delete a;
वर्चुअल बिल्डर : कंस्ट्रक्टर्स वर्चुअल नहीं हो सकते। कंस्ट्रक्टर को वर्चुअल फ़ंक्शन के रूप में घोषित करना एक सिंटैक्स त्रुटि है।
मित्र
Q # 66) फ्रेंड फंक्शन क्या है?
उत्तर: C ++ वर्ग अपने निजी और संरक्षित सदस्यों को कक्षा के बाहर पहुंचने की अनुमति नहीं देता है। लेकिन इस नियम का उपयोग करके उल्लंघन किया जा सकता है मित्र ' समारोह।
जैसा कि नाम से ही पता चलता है कि फ्रेंड फंक्शन एक बाहरी फंक्शन है जो क्लास का दोस्त है। कक्षा के निजी और संरक्षित तरीकों का उपयोग करने के लिए मित्र फ़ंक्शन के लिए, हमारे पास कक्षा के अंदर शामिल कीवर्ड 'मित्र' के साथ मित्र फ़ंक्शन का एक प्रोटोटाइप होना चाहिए।
Q # 67) मित्र वर्ग क्या है?
उत्तर: मित्र वर्ग का उपयोग तब किया जाता है जब हमें निजी और संरक्षित एक्सेस स्पेसर्स के लिए नियम को ओवरराइड करने की आवश्यकता होती है ताकि दो कक्षाएं एक-दूसरे के साथ मिलकर काम कर सकें।
इसलिए, हमारे पास दूसरे वर्ग का मित्र होने के लिए एक मित्र वर्ग हो सकता है। इस तरह, मित्र वर्ग अपने तरीके से निजी, दुर्गम चीजों को रख सकते हैं।
जब हमें सार्वजनिक किए गए विवरणों को उजागर किए बिना किसी वर्ग (निजी सदस्य) के आंतरिक कार्यान्वयन तक पहुंचने की आवश्यकता होती है, तो हम मित्र कार्यों के लिए जाते हैं।
उन्नत सी ++
टेम्पलेट्स
Q # 68) एक टेम्पलेट क्या है?
उत्तर: टेम्प्लेट ऐसे फ़ंक्शन बनाने की अनुमति देते हैं जो डेटा प्रकार (जेनेरिक) से स्वतंत्र होते हैं और किसी भी डेटा प्रकार को पैरामीटर के रूप में ले सकते हैं और सभी संभावित डेटा प्रकारों के साथ फ़ंक्शन को अधिभार किए बिना मान लौटा सकते हैं। टेम्पलेट मैक्रो की कार्यक्षमता को पूरा करते हैं।
इसका प्रोटोटाइप निम्नलिखित में से कोई एक है:
टेम्पलेट पहचान लो > function_declaration;
टेम्पलेट पहचान लो > function_declaration;
दोनों प्रोटोटाइप के बीच एकमात्र अंतर कीवर्ड क्लास या टाइपनेम का उपयोग है। जेनेरिक होने की उनकी बुनियादी कार्यक्षमता समान रहती है।
संचालन अपवाद
Q # 69) अपवाद हैंडलिंग क्या है? क्या C ++ एक्सेप्शन हैंडलिंग का समर्थन करता है?
उत्तर: हां C ++ अपवाद हैंडलिंग को सपोर्ट करता है।
हम यह सुनिश्चित नहीं कर सकते कि कोड सामान्य रूप से हर समय निष्पादित होगा। ऐसी कुछ स्थितियां हो सकती हैं जो हमारे द्वारा लिखे गए कोड को खराबी के लिए मजबूर कर सकती हैं, भले ही वह त्रुटि रहित हो। कोड की इस खराबी को कहा जाता है अपवाद ।
जब कोई अपवाद हुआ है, तो संकलक को इसे फेंकना होगा ताकि हमें पता चले कि अपवाद हुआ है। जब एक अपवाद को फेंक दिया गया है, तो संकलक को यह सुनिश्चित करना होगा कि इसे ठीक से संभाला जाए, ताकि कार्यक्रम का प्रवाह जारी रहे या ठीक से समाप्त हो जाए। इसे कहते हैं एक अपवाद की हैंडलिंग।
इस प्रकार C ++ में, हमारे पास तीन कीवर्ड हैं यानी प्रयत्न , फेंकना तथा पकड़ जो अपवाद हैंडलिंग में हैं।
अपवाद ब्लॉक के लिए सामान्य वाक्यविन्यास है:
try{ …. # Code that is potentially about to throw exception goes here …. throw exception; } catch(exception type) { … #code to handle exception goes here }
जैसा कि ऊपर दिखाया गया है, कोड जो संभावित रूप से खराबी हो सकता है, कोशिश ब्लॉक के तहत रखा गया है। जब कोड में खराबी होती है, तो एक अपवाद फेंक दिया जाता है। यह अपवाद तब कैच ब्लॉक के तहत पकड़ा जाता है और इसे संभाला जाता है यानी उपयुक्त कार्रवाई की जाती है।
Q # 70) C ++ मानक अपवादों पर टिप्पणी करें?
उत्तर: C ++ कुछ मानक अपवादों का समर्थन करता है जिन्हें अगर हम कोड ब्लॉक के अंदर कोड डालते हैं तो पकड़ा जा सकता है। ये अपवाद बेस क्लास का एक हिस्सा हैं ” एसटीडी :: अपवाद ”। यह क्लास C ++ हैडर फ़ाइल में परिभाषित है।
इस वर्ग द्वारा समर्थित अपवादों के कुछ उदाहरणों में शामिल हैं:
bad_alloc - ’new’ द्वारा फेंका गया
runtime_error - रनटाइम त्रुटियों के लिए फेंक दिया गया
bad_typeid - टाइप आईडी द्वारा फेंका गया
मानक टेम्पलेट लाइब्रेरी का परिचय
Q # 71) एक मानक टेम्पलेट लाइब्रेरी (STL) क्या है? एसटीएल कंटेनरों के विभिन्न प्रकार क्या हैं?
उत्तर: एक मानक टेम्पलेट लाइब्रेरी (एसटीएल) मानक C ++ विनिर्देश में शामिल करने के लिए ANSI समिति द्वारा अनुमोदित कंटेनर टेम्पलेट्स का एक पुस्तकालय है। हमारे पास विभिन्न प्रकार के एसटीएल कंटेनर हैं जो इस बात पर निर्भर करते हैं कि वे तत्वों को कैसे स्टोर करते हैं।
- कतार, ढेर - ये पारंपरिक कतार और स्टैक के समान हैं और इन्हें अनुकूली कंटेनर कहा जाता है।
- सेट, नक्शा - ये मूल रूप से कंटेनर हैं जिनकी कुंजी / मूल्य जोड़े हैं और प्रकृति में सहयोगी हैं।
- वेक्टर, और - ये प्रकृति में अनुक्रमिक हैं और सरणियों में समानताएं हैं।
Q # 72) Iterator Class क्या है?
उत्तर: C ++ में एक कंटेनर क्लास विभिन्न वस्तुओं का एक संग्रह है।
अगर हमें वस्तुओं के इस संग्रह के माध्यम से पार करने की आवश्यकता है, तो हम इसे सरल सूचकांक चर का उपयोग करके नहीं कर सकते हैं। इसलिए, हमारे पास STL में एक विशेष वर्ग है जिसे a कहा जाता है इटरेटर वह वर्ग जिसका उपयोग कंटेनर वर्ग की सामग्री के माध्यम से करने के लिए किया जा सकता है।
पुनरावृत्तियों की विभिन्न श्रेणियों में शामिल हैं इनपुट पुनरावृत्तियों, आउटपुट पुनरावृत्तियों, आगे पुनरावृत्तियों, द्विदिश पुनरावृत्तियों, यादृच्छिक अभिगम, आदि।
Q # 73) एक बाहरी Iterator और एक आंतरिक Iterator में क्या अंतर है? बाहरी इटरेटर का एक लाभ बताइए।
उत्तर: एक आंतरिक पुनरावृत्ति को उस कक्षा के सदस्य कार्यों के साथ कार्यान्वित किया जाता है, जिसमें आइटम के माध्यम से कदम होता है।
एक बाहरी पुनरावृत्ति को एक अलग वर्ग के रूप में कार्यान्वित किया जाता है जो उस वस्तु के लिए बाध्य हो सकता है जिसके पास आइटम के माध्यम से कदम है। बाहरी इटरेटर का मूल लाभ यह है कि इसे अलग वर्ग के रूप में लागू करना आसान है।
दूसरे, चूंकि यह एक अलग वर्ग है, कई पुनरावृत्त वस्तुएं एक साथ सक्रिय हो सकती हैं।
आगे पढ़ना => ग साक्षात्कार सवाल
निष्कर्ष
C ++ साक्षात्कार के लगभग सभी प्रमुख कोडिंग और प्रोग्रामिंग विषय इस लेख में शामिल किए गए हैं।
हम आशा करते हैं कि साक्षात्कार प्रश्नों की इस श्रृंखला का उपयोग करके साक्षात्कार की तैयारी के बाद कोई भी उम्मीदवार आराम महसूस करेगा।
आपके साक्षात्कार के लिए शुभकामनाएँ !!
अनुशंसित पाठ
- साक्षात्कार प्रश्न और उत्तर
- ईटीएल परीक्षण साक्षात्कार प्रश्न और उत्तर
- कुछ मुश्किल मैनुअल परीक्षण प्रश्न और उत्तर
- 25 सर्वश्रेष्ठ चुस्त परीक्षण साक्षात्कार प्रश्न और उत्तर
- उत्तर के साथ स्पॉक साक्षात्कार प्रश्न (सर्वाधिक लोकप्रिय)
- कुछ दिलचस्प सॉफ्टवेयर परीक्षण साक्षात्कार प्रश्न
- शीर्ष 20+ .NET साक्षात्कार प्रश्न और उत्तर
- शीर्ष 32 सर्वश्रेष्ठ डाटाजेज साक्षात्कार प्रश्न और उत्तर