Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

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

एक क्लास कंस्ट्रक्टर एक क्लास का विशेष सदस्य फ़ंक्शन होता है जो उस क्लास के नए ऑब्जेक्ट्स बनाने पर निष्पादित होता है।

एक कंस्ट्रक्टर का नाम क्लास के समान ही होगा और इसका कोई रिटर्न टाइप नहीं होगा, यहां तक कि void भी नहीं। कंस्ट्रक्टर्स कुछ मेंबर वेरिएबल्स के लिए प्रारंभिक मान सेट करने के लिए बहुत उपयोगी हो सकते हैं।

उदाहरण

#include <iostream>
using namespace std;

class Line {
public:
    void setLength(double len);
    double getLength(void);
    Line(); // यह कंस्ट्रक्टर है
private:
    double length;
};

// कंस्ट्रक्टर सहित मेंबर फ़ंक्शन डेफिनिशन्स
Line::Line(void) {
    cout << "ऑब्जेक्ट बनाया जा रहा है" << endl;
    length = 0.0; // डिफ़ॉल्ट इनिशियलाइज़ेशन
}

void Line::setLength(double len) {
    length = len;
}

double Line::getLength(void) {
    return length;
}

int main() {
    Line line;
    line.setLength(6.0);
    cout << "लाइन की लंबाई: " << line.getLength() << endl;
    return 0;
}

आउटपुट

ऑब्जेक्ट बनाया जा रहा है
लाइन की लंबाई: 6

कंस्ट्रक्टर के प्रकार

प्रकार सिंटैक्स विवरण
डिफ़ॉल्ट कंस्ट्रक्टर ClassName() कोई पैरामीटर नहीं, कंपाइलर द्वारा जनरेटेड यदि कोई कंस्ट्रक्टर परिभाषित नहीं है
पैरामीटराइज़्ड कंस्ट्रक्टर ClassName(int x, double y) आर्गुमेंट्स लेता है
कॉपी कंस्ट्रक्टर ClassName(const ClassName& other) मौजूदा ऑब्जेक्ट से नया ऑब्जेक्ट बनाता है
मूव कंस्ट्रक्टर (C++11) ClassName(ClassName&& other) संसाधनों को मूव करता है
डिलीगेटिंग कंस्ट्रक्टर (C++11) ClassName() : ClassName(0) {} दूसरे कंस्ट्रक्टर को कॉल करता है

उदाहरण: विभिन्न कंस्ट्रक्टर्स

class Point {
    int x, y;
public:
    // डिफ़ॉल्ट
    Point() : x(0), y(0) { cout << "डिफ़ॉल्ट कंस्ट्रक्टर\n"; }
    
    // पैरामीटराइज़्ड
    Point(int x_, int y_) : x(x_), y(y_) { cout << "पैरामीटराइज़्ड\n"; }
    
    // कॉपी
    Point(const Point& p) : x(p.x), y(p.y) { cout << "कॉपी कंस्ट्रक्टर\n"; }
    
    // मूव
    Point(Point&& p) noexcept : x(p.x), y(p.y) { 
        p.x = p.y = 0; 
        cout << "मूव कंस्ट्रक्टर\n"; 
    }
    
    // डिलीगेटिंग
    Point(int val) : Point(val, val) { cout << "डिलीगेटिंग\n"; }
};

कंस्ट्रक्टर इनिशियलाइज़र लिस्ट

// अच्छा: इनिशियलाइज़र लिस्ट (कुशल)
Line::Line(double len) : length(len) { }

// बुरा: असाइनमेंट (डिफ़ॉल्ट कंस्ट्रक्शन + असाइनमेंट)
Line::Line(double len) { length = len; }

डिफ़ॉल्ट कंस्ट्रक्टर कब जनरेट होता है?

  • यदि क्लास में कोई यूजर-डिफाइन्ड कंस्ट्रक्टर नहीं है
  • सभी नॉन-स्टैटिक डेटा मेंबर्स के डिफ़ॉल्ट कंस्ट्रक्टर होने चाहिए
  • सभी बेस क्लासेस के डिफ़ॉल्ट कंस्ट्रक्टर होने चाहिए

डिफ़ॉल्ट कंस्ट्रक्टर को डिलीट करना

class NonDefaultConstructible {
public:
    NonDefaultConstructible() = delete; // डिफ़ॉल्ट कंस्ट्रक्शन रोकें
    NonDefaultConstructible(int x) { }
};

एक्सप्लिसिट कंस्ट्रक्टर

class String {
public:
    explicit String(int size); // इम्प्लिसिट कन्वर्जन रोकता है
};

void func(String s) { }
func(10); // एरर! इम्प्लिसिट कन्वर्जन ब्लॉक्ड
func(String(10)); // OK
  1. - C++ में मिड-पॉइंट लाइन जनरेशन एल्गोरिदम

    एक रेखा दो बिंदुओं को जोड़ती है। यह ग्राफिक्स में एक मूल तत्व है। एक रेखा खींचने के लिए, आपको दो बिंदुओं की आवश्यकता होती है जिनके बीच आप स्क्रीन पर एक रेखा खींच सकते हैं और ग्राफिक्स के संदर्भ में हम बिंदुओं को पिक्सेल के रूप में संदर्भित करते हैं और प्रत्येक पिक्सेल पूर्णांक निर्देशांक से जुड़ा हो

  1. C++ में लाइन रिफ्लेक्शन - Y-अक्ष के समानांतर सममित रेखा जांचें C++ में लाइन रिफ्लेक्शन - Y-अक्ष के समानांतर सममित रेखा जांचें

    समस्या विवरण मान लीजिए हमारे पास 2D तल पर n बिंदु हैं, हमें जांचना है कि क्या y-अक्ष के समानांतर कोई रेखा है जो दिए गए बिंदुओं को सममित रूप से प्रतिबिंबित करती है, दूसरे शब्दों में, जांचें कि क्या कोई ऐसी रेखा मौजूद है जो सभी बिंदुओं को दी गई रेखा पर प्रतिबिंबित करने के बाद मूल बिंदुओं का समुच्चय प

  1. C++ में एक रेखा पर अधिकतम बिंदु C++ में एक रेखा पर अधिकतम बिंदु

    मान लीजिए हमारे पास एक 2D तल है। हमें उन अधिकतम बिंदुओं की संख्या ढूंढनी है जो एक ही सीधी रेखा पर स्थित हैं। तो यदि बिंदु इस तरह हैं -तो 4 बिंदु हैंइसे हल करने के लिए, हम निम्नलिखित चरणों का पालन करेंगे -n := बिंदुओं की संख्या, यदि n < 3, तो n लौटाएंans := 2i को 1 से n - 1 तक की रेंज मेंcount := 0इं