C++ साक्षात्कार कैसे पास करें: A से Z तक शीर्ष प्रश्न

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

C++ साक्षात्कार कैसे पास करें: A से Z तक शीर्ष प्रश्न

\n\n

C++ डेवलपर पद के लिए साक्षात्कार केवल सिंटैक्स के ज्ञान की नहीं, बल्कि कंपाइलर के काम करने, मेमोरी प्रबंधन और ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग की विशेषताओं की गहरी समझ की भी परीक्षा है। इस लेख में हमने A से Z तक उन शीर्ष प्रश्नों का विश्लेषण किया है जो साक्षात्कारों में सबसे अधिक पूछे जाते हैं। यह सामग्री जूनियर डेवलपर्स और मिड-लेवल की तैयारी करने वालों दोनों के लिए उपयोगी होगी।

\n\n

1. सिंटैक्स और डेटा प्रकारों की मूल बातें

\n\n

आइए बुनियादी बातों से शुरू करें - ऐसे प्रश्न जो C++ की मूलभूत अवधारणाओं की आपकी समझ की जाँच करते हैं।

\n\n

1.1. रेफरेंस पॉइंटर से कैसे भिन्न है?

\n

यह एक क्लासिक प्रश्न है। मुख्य अंतर:

\n
    \n
  • रेफरेंस nullptr नहीं हो सकता, पॉइंटर हो सकता है।
  • \n
  • इनिशियलाइज़ेशन के बाद रेफरेंस को किसी दूसरे ऑब्जेक्ट से पुनः जोड़ा नहीं जा सकता।
  • \n
  • पॉइंटर अंकगणित का समर्थन करता है, रेफरेंस नहीं करता।
  • \n
\n\n
int a = 5;\nint& ref = a;  // रेफरेंस\nint* ptr = &a; // पॉइंटर\n\nref = 10;      // a = 10\n*ptr = 20;     // a = 20\n
\n\n

1.2. const क्या है और इसका सही उपयोग कैसे करें?

\n

C++ में const का उपयोग डेटा को परिवर्तन से बचाने के लिए किया जाता है। प्रकार से पहले और बाद में const के बीच अंतर करना महत्वपूर्ण है:

\n
    \n
  • const int* ptr — एक स्थिरांक पूर्णांक पर पॉइंटर (पते पर मान नहीं बदला जा सकता)।
  • \n
  • int* const ptr — एक पूर्णांक पर स्थिरांक पॉइंटर (पता नहीं बदला जा सकता)।
  • \n
\n\n

2. ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग (OOP)

\n\n

OOP पर प्रश्न C++ साक्षात्कार का एक अनिवार्य हिस्सा हैं। आइए मुख्य विषयों का विश्लेषण करें।

\n\n

2.1. वर्चुअल फंक्शन और पॉलीमॉर्फिज़्म

\n

वर्चुअल फंक्शन लेट बाइंडिंग (डायनेमिक पॉलीमॉर्फिज़्म) प्रदान करते हैं। उदाहरण:

\n\n
class 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\n

2.2. शुद्ध वर्चुअल फंक्शन और एब्सट्रैक्ट क्लास

\n

कम से कम एक शुद्ध वर्चुअल फंक्शन (= 0) वाला क्लास एब्सट्रैक्ट बन जाता है। ऐसे क्लास का इंस्टेंस नहीं बनाया जा सकता - केवल सभी शुद्ध वर्चुअल मेथड्स के कार्यान्वयन वाला वंशज ही बनाया जा सकता है।

\n\n

2.3. vtable और vptr क्या हैं?

\n

पॉलीमॉर्फिज़्म को लागू करने के लिए, कंपाइलर वर्चुअल फंक्शन वाले प्रत्येक क्लास के लिए एक वर्चुअल टेबल (vtable) बनाता है। प्रत्येक ऑब्जेक्ट में इस तालिका पर एक छिपा हुआ पॉइंटर (vptr) होता है। वर्चुअल फंक्शन का कॉल vptr के माध्यम से अप्रत्यक्ष संदर्भ द्वारा होता है, जो थोड़ा ओवरहेड जोड़ता है।

\n\n

3. मेमोरी प्रबंधन और स्मार्ट पॉइंटर

\n\n

C++ डेवलपर को मेमोरी पर पूर्ण नियंत्रण प्रदान करता है, जिसके लिए विशेष सावधानी की आवश्यकता होती है।

\n\n

3.1. new/delete और malloc/free के बीच अंतर

\n
    \n
  • malloc मेमोरी आवंटित करता है, लेकिन कंस्ट्रक्टर को कॉल नहीं करता। free डिस्ट्रक्टर को कॉल किए बिना मेमोरी मुक्त करता है।
  • \n
  • new मेमोरी आवंटित करता है और कंस्ट्रक्टर को कॉल करता है। delete डिस्ट्रक्टर को कॉल करता है और मेमोरी मुक्त करता है।
  • \n
\n\n

3.2. स्मार्ट पॉइंटर: unique_ptr, shared_ptr, weak_ptr

\n

स्मार्ट पॉइंटर स्वचालित रूप से ऑब्जेक्ट के जीवनकाल का प्रबंधन करते हैं। मुख्य बिंदु:

\n
    \n
  • std::unique_ptr — अनन्य स्वामित्व, कॉपी नहीं किया जा सकता, केवल स्थानांतरित किया जा सकता है।
  • \n
  • std::shared_ptr — रेफरेंस काउंट के माध्यम से साझा स्वामित्व।
  • \n
  • std::weak_ptr — रेफरेंस काउंट नहीं बढ़ाता, और

ब्लॉग

पुस्तक अनुशंसाएँ