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

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

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

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

C++ साक्षात्कार कैसे पास करें: कोड उदाहरणों के साथ शीर्ष प्रश्न



C++ साक्षात्कार एक डेवलपर के लिए सबसे कठिन परीक्षाओं में से एक है। यह भाषा निम्न-स्तरीय प्रोग्रामिंग की शक्ति को OOP और टेम्पलेट्स के आधुनिक प्रतिमानों के साथ जोड़ती है। साक्षात्कार को सफलतापूर्वक पास करने के लिए, केवल सिंटैक्स जानना ही नहीं, बल्कि यह समझना भी आवश्यक है कि मेमोरी, कंपाइलर और स्टैंडर्ड लाइब्रेरी कैसे काम करते हैं। इस लेख में, हम शीर्ष 10 प्रश्नों पर चर्चा करेंगे जो C++ साक्षात्कारों में सबसे अधिक पूछे जाते हैं, विस्तृत उत्तरों और कोड उदाहरणों के साथ।



1. RAII क्या है और इसकी आवश्यकता क्यों है?

RAII (Resource Acquisition Is Initialization) C++ की प्रमुख मुहावरों में से एक है। सार सरल है: संसाधन (मेमोरी, फ़ाइल, म्यूटेक्स) ऑब्जेक्ट के कंस्ट्रक्टर में प्राप्त किया जाता है और डिस्ट्रक्टर में मुक्त किया जाता है। यह अपवादों के होने पर भी सही सफाई सुनिश्चित करता है।



गलत कोड का उदाहरण (RAII के बिना):

void process() {    int* ptr = new int(42);    // ... कोड जो अपवाद फेंक सकता है    delete ptr; // यदि delete से पहले अपवाद होता है तो लीकेज}


RAII के साथ उदाहरण (std::unique_ptr का उपयोग करके):

#include <memory>

void process() { std::unique_ptr<int> ptr = std::make_unique<int>(42); // ... अपवादों वाला कोड // स्कोप से बाहर निकलने पर ptr स्वचालित रूप से हट जाएगा}


यह क्यों पूछा जाता है: RAII C++ में सुरक्षित संसाधन प्रबंधन का आधार है। इसके बिना विश्वसनीय कोड लिखना असंभव है।



2. वर्चुअल फ़ंक्शन और शुद्ध वर्चुअल फ़ंक्शन में क्या अंतर है?

वर्चुअल फ़ंक्शन (virtual) को व्युत्पन्न वर्ग में ओवरराइड किया जा सकता है, लेकिन इसका आधार वर्ग में कार्यान्वयन होता है। शुद्ध वर्चुअल फ़ंक्शन (= 0) का आधार वर्ग में कोई कार्यान्वयन नहीं होता है और यह वर्ग को अमूर्त बना देता है — ऐसे वर्ग का ऑब्जेक्ट नहीं बनाया जा सकता है।



उदाहरण:

class Base {public:    virtual void foo() { std::cout << "Base foo"; }   // वर्चुअल    virtual void bar() = 0;                               // शुद्ध वर्चुअल};

class Derived : public Base {public: void foo() override { std::cout << "Derived foo"; } void bar() override { std::cout << "Derived bar"; }};


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



3. C++ में कौन से स्मार्ट पॉइंटर हैं और उनका उपयोग कब करना चाहिए?

C++11 में तीन प्रकार के स्मार्ट पॉइंटर आए:

  • std::unique_ptr — एकमात्र स्वामित्व। कॉपी नहीं किया जा सकता, केवल स्थानांतरित किया जा सकता है। एक मालिक वाले संसाधनों के लिए आदर्श।
  • std::shared_ptr — साझा स्वामित्व। रेफरेंस काउंटर का उपयोग करता है। तब उपयुक्त जब कई ऑब्जेक्ट एक संसाधन के मालिक हों।
  • std::weak_ptr — संसाधन का मालिक नहीं है, लेकिन shared_ptr का निरीक्षण कर सकता है। चक्रीय संदर्भों को तोड़ने के लिए आवश्यक है।


unique_ptr के उपयोग का उदाहरण:

#include <memory>

class MyClass { /* ... */ };

void example() { auto ptr = std::make_unique<MyClass>(); // auto ptr2 = ptr; // त्रुटि! कॉपी नहीं किया जा सकता auto ptr3 = std::move(ptr); // ठीक है, स्थानांतरण}


चक्रीय संदर्भों को रोकने के लिए shared_ptr और weak_ptr का उदाहरण:

struct Node {    std::shared_ptr<Node> next;    std::weak_ptr<Node> prev; // चक्र से बचने के लिए weak_ptr};


4. मूव-सिमैंटिक्स और std::move क्या है?

मूव-सिमैंटिक्स कॉपी करने के बजाय एक ऑब्जेक्ट से दूसरे में संसाधनों को "स्थानांतरित" करने की अनुमति देता है। यह अस्थायी ऑब्जेक्ट्स या जब कॉपी करना महंगा हो (जैसे, std::string या

ब्लॉग

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