मुख्य सामग्री पर जाएं
मॉड्यूल 4 · पाठ 2 का 2पाठ्यक्रम में 10/18~12 min
मॉड्यूल पाठ (2/2)

निर्माता और विध्वंसक

कंस्ट्रक्टर और डिस्ट्रक्टर विशेष सदस्य कार्य हैं जो वस्तुओं के जीवनचक्र का प्रबंधन करते हैं: उनका निर्माण (आरंभीकरण) और उनका विनाश (संसाधन सफाई)।

कंस्ट्रक्टर्स

जब क्लास का कोई ऑब्जेक्ट मेमोरी में बनाया जाता है तो कंस्ट्रक्टर को स्वचालित रूप से कॉल किया जाता है।

  • इसका वही नाम है जो कक्षा का है।
  • इसमें रिटर्न प्रकार नहीं है (void भी नहीं)।
  • मापदंडों के विभिन्न सेटों को स्वीकार करने के लिए इसे अतिभारित किया जा सकता है।
C++
#include <iostream>
#include <string>

class Item {
private:
    std::string name;
    double price;

public:
    // Parameterized constructor
    Item(std::string itemName, double itemPrice) {
        name = itemName;
        price = itemPrice;
        std::cout << "Object " << name << " created." << std::endl;
    }

    void display() {
        std::cout << name << ": " << price << " EUR" << std::endl;
    }
};

int main() {
    // Implicit call to the constructor passing parameters
    Item book("Libro C++", 29.99);
    book.display();
    return 0;
}

डिफ़ॉल्ट कंस्ट्रक्टर

यदि आप किसी कंस्ट्रक्टर को परिभाषित नहीं करते हैं, तो C++ कंपाइलर बिना पैरामीटर के एक डिफ़ॉल्ट कंस्ट्रक्टर उत्पन्न करता है। हालाँकि, यदि आप पैरामीटर के साथ एक कस्टम कंस्ट्रक्टर लिखते हैं, तो कंपाइलर स्वचालित रूप से डिफ़ॉल्ट कंस्ट्रक्टर उत्पन्न नहीं करता है, इसलिए यदि आवश्यक हो तो आपको इसे स्पष्ट रूप से परिभाषित करने की आवश्यकता होगी:

C++
class Point {
public:
    int x;
    int y;

    // Explicit default constructor
    Point() {
        x = 0;
        y = 0;
    }
};

विनाशकर्ता

जब ऑब्जेक्ट दायरे से बाहर चला जाता है या मेमोरी से स्पष्ट रूप से हटा दिया जाता है तो डिस्ट्रक्टर को स्वचालित रूप से कॉल किया जाता है।

  • इसका वही नाम है जो क्लास के पहले एक टिल्ड ~ (उदा. ~Item()) है।
  • यह पैरामीटर स्वीकार नहीं करता है और इसका कोई रिटर्न प्रकार नहीं है।
  • इसका उपयोग संसाधनों को जारी करने के लिए किया जाता है (उदाहरण के लिए, फ़ाइलें बंद करना, गतिशील रूप से आवंटित मेमोरी को मुक्त करना)।
C++
class ResourceManager {
public:
    ~ResourceManager() {
        // Cleanup code
        std::cout << "Resources released." << std::endl;
    }
};

खुद कोशिश करना

व्यायाम#cpp.m4.l2.e1
प्रयास: 0लोड हो रहा है...

एक निजी सदस्य std::string उपयोगकर्ता नाम के साथ उपयोगकर्ता नामक वर्ग को परिभाषित करें। एक सार्वजनिक कंस्ट्रक्टर जोड़ें जो एक स्ट्रिंग (उपयोगकर्ता (std :: स्ट्रिंग नाम)) स्वीकार करता है और उपयोगकर्ता नाम प्रारंभ करने के लिए इसका उपयोग करता है। एक सार्वजनिक गेटर std::string getUsername() जोड़ें जो उपयोगकर्ता नाम लौटाता है। मुख्य रूप से, 'ऐलिस' को नाम के रूप में पास करते हुए एक उपयोगकर्ता ऑब्जेक्ट बनाएं, और std::cout का उपयोग करके उसका उपयोगकर्ता नाम प्रिंट करें।

संपादक लोड हो रहा है...
संकेत दिखाएँ

कंस्ट्रक्टर का नाम क्लास के समान है और वह कोई रिटर्न प्रकार निर्दिष्ट नहीं करता है, यहां तक ​​कि `void` भी नहीं।

3 प्रयासों के बाद समाधान उपलब्ध है

व्यायाम#cpp.m4.l2.e2
प्रयास: 0लोड हो रहा है...

दो सार्वजनिक पूर्णांक सदस्यों के साथ प्वाइंट नामक एक वर्ग को परिभाषित करें: x और y। एक डिफॉल्ट कंस्ट्रक्टर जोड़ें (कोई पैरामीटर नहीं) जो x और y को 0 से आरंभ करता है। मुख्य रूप से, डिफॉल्ट कंस्ट्रक्टर का उपयोग करके एक प्वाइंट ऑब्जेक्ट बनाएं और x और y प्रिंट करें।

संपादक लोड हो रहा है...
संकेत दिखाएँ

डिफ़ॉल्ट कंस्ट्रक्टर कोई तर्क नहीं लेता: `प्वाइंट() { x = 0; वाई = 0; }`.

3 प्रयासों के बाद समाधान उपलब्ध है