C++ साक्षात्कार कैसे पास करें: A से Z तक शीर्ष प्रश्न
\n\nC++ डेवलपर पद के लिए साक्षात्कार केवल सिंटैक्स के ज्ञान की नहीं, बल्कि कंपाइलर के काम करने, मेमोरी प्रबंधन और ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग की विशेषताओं की गहरी समझ की भी परीक्षा है। इस लेख में हमने A से Z तक उन शीर्ष प्रश्नों का विश्लेषण किया है जो साक्षात्कारों में सबसे अधिक पूछे जाते हैं। यह सामग्री जूनियर डेवलपर्स और मिड-लेवल की तैयारी करने वालों दोनों के लिए उपयोगी होगी।
\n\n1. सिंटैक्स और डेटा प्रकारों की मूल बातें
\n\nआइए बुनियादी बातों से शुरू करें - ऐसे प्रश्न जो C++ की मूलभूत अवधारणाओं की आपकी समझ की जाँच करते हैं।
\n\n1.1. रेफरेंस पॉइंटर से कैसे भिन्न है?
\nयह एक क्लासिक प्रश्न है। मुख्य अंतर:
\n- \n
- रेफरेंस
nullptrनहीं हो सकता, पॉइंटर हो सकता है। \n - इनिशियलाइज़ेशन के बाद रेफरेंस को किसी दूसरे ऑब्जेक्ट से पुनः जोड़ा नहीं जा सकता। \n
- पॉइंटर अंकगणित का समर्थन करता है, रेफरेंस नहीं करता। \n
int a = 5;\nint& ref = a; // रेफरेंस\nint* ptr = &a; // पॉइंटर\n\nref = 10; // a = 10\n*ptr = 20; // a = 20\n\n\n1.2. const क्या है और इसका सही उपयोग कैसे करें?
\nC++ में const का उपयोग डेटा को परिवर्तन से बचाने के लिए किया जाता है। प्रकार से पहले और बाद में const के बीच अंतर करना महत्वपूर्ण है:
- \n
const int* ptr— एक स्थिरांक पूर्णांक पर पॉइंटर (पते पर मान नहीं बदला जा सकता)। \nint* const ptr— एक पूर्णांक पर स्थिरांक पॉइंटर (पता नहीं बदला जा सकता)। \n
2. ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग (OOP)
\n\nOOP पर प्रश्न C++ साक्षात्कार का एक अनिवार्य हिस्सा हैं। आइए मुख्य विषयों का विश्लेषण करें।
\n\n2.1. वर्चुअल फंक्शन और पॉलीमॉर्फिज़्म
\nवर्चुअल फंक्शन लेट बाइंडिंग (डायनेमिक पॉलीमॉर्फिज़्म) प्रदान करते हैं। उदाहरण:
\n\nclass Base {\npublic:\n virtual void show() { std::cout << "Base\\n"; }\n virtual ~Base() = default;\n};\n\nclass Derived : public Base {\npublic:\n void show() override { std::cout << "Derived\\n"; }\n};\n\nint main() {\n Base* b = new Derived();\n b->show(); // "Derived" प्रिंट करेगा\n delete b;\n}\n\n\nवर्चुअल डिस्ट्रक्टर को याद रखना महत्वपूर्ण है - इसके बिना, बेस क्लास पॉइंटर के माध्यम से ऑब्जेक्ट को हटाते समय केवल बेस क्लास का डिस्ट्रक्टर कॉल किया जाएगा, जिससे मेमोरी लीक होगी।
\n\n2.2. शुद्ध वर्चुअल फंक्शन और एब्सट्रैक्ट क्लास
\nकम से कम एक शुद्ध वर्चुअल फंक्शन (= 0) वाला क्लास एब्सट्रैक्ट बन जाता है। ऐसे क्लास का इंस्टेंस नहीं बनाया जा सकता - केवल सभी शुद्ध वर्चुअल मेथड्स के कार्यान्वयन वाला वंशज ही बनाया जा सकता है।
2.3. vtable और vptr क्या हैं?
\nपॉलीमॉर्फिज़्म को लागू करने के लिए, कंपाइलर वर्चुअल फंक्शन वाले प्रत्येक क्लास के लिए एक वर्चुअल टेबल (vtable) बनाता है। प्रत्येक ऑब्जेक्ट में इस तालिका पर एक छिपा हुआ पॉइंटर (vptr) होता है। वर्चुअल फंक्शन का कॉल vptr के माध्यम से अप्रत्यक्ष संदर्भ द्वारा होता है, जो थोड़ा ओवरहेड जोड़ता है।
\n\n3. मेमोरी प्रबंधन और स्मार्ट पॉइंटर
\n\nC++ डेवलपर को मेमोरी पर पूर्ण नियंत्रण प्रदान करता है, जिसके लिए विशेष सावधानी की आवश्यकता होती है।
\n\n3.1. new/delete और malloc/free के बीच अंतर
\n- \n
mallocमेमोरी आवंटित करता है, लेकिन कंस्ट्रक्टर को कॉल नहीं करता।freeडिस्ट्रक्टर को कॉल किए बिना मेमोरी मुक्त करता है। \nnewमेमोरी आवंटित करता है और कंस्ट्रक्टर को कॉल करता है।deleteडिस्ट्रक्टर को कॉल करता है और मेमोरी मुक्त करता है। \n
3.2. स्मार्ट पॉइंटर: unique_ptr, shared_ptr, weak_ptr
\nस्मार्ट पॉइंटर स्वचालित रूप से ऑब्जेक्ट के जीवनकाल का प्रबंधन करते हैं। मुख्य बिंदु:
\n- \n
std::unique_ptr— अनन्य स्वामित्व, कॉपी नहीं किया जा सकता, केवल स्थानांतरित किया जा सकता है। \nstd::shared_ptr— रेफरेंस काउंट के माध्यम से साझा स्वामित्व। \nstd::weak_ptr— रेफरेंस काउंट नहीं बढ़ाता, और