কম্পিউটার টিউটোরিয়াল

C++-এ কনস্ট্রাক্টর ডেলিগেশন (Constructor Delegation)


এখানে আমরা দেখব কনস্ট্রাক্টর ডেলিগেশন কী। যখন একটি কনস্ট্রাক্টর একই ক্লাসের অন্য কনস্ট্রাক্টরকে কল করে, তখন তাকে কনস্ট্রাক্টর ডেলিগেশন বলা হয়। এই ফিচার C++11 থেকে উপলব্ধ।

নিচের প্রোগ্রামটি দেখি এবং বিশ্লেষণ করি কোথায় সমস্যা।

উদাহরণ (ডেলিগেশন ছাড়া)

#include <iostream>
using namespace std;

class MyClass {
    int a, b, c;
public:
    MyClass() {
        a = b = c = 0;
    }
    MyClass(int c) {
        // a এবং b ইনিশিয়ালাইজ করা রিডান্ডেন্ট, শুধু c ইনিশিয়ালাইজ করলেই চলবে
        a = 0;
        b = 0;
        this->c = c;
    }
    void display() {
        cout << "a : " << a << ", b : " << b << ", c : " << c;
    }
};

int main() {
    MyClass my_obj(5);
    my_obj.display();
    return 0;
}

আউটপুট

a : 0, b : 0, c : 5

কোড কাজ করছে কিন্তু রিডান্ডেন্ট কোড আছে। প্যারামিটার-রহিত কনস্ট্রাক্টর a এবং b-কে ০ সেট করে। তাই দ্বিতীয় কনস্ট্রাক্টরে প্রথম কনস্ট্রাক্টর কল করলে কোড আরও কার্যকর হবে। এর জন্য কনস্ট্রাক্টর ডেলিগেশন ব্যবহার করা হয়।

উদাহরণ (ডেলিগেশন সহ)

#include <iostream>
using namespace std;

class MyClass {
    int a, b, c;
public:
    MyClass() {
        a = b = c = 0;
    }
    MyClass(int c) : MyClass() { // কনস্ট্রাক্টর ডেলিগেশন ব্যবহার
        this->c = c;
    }
    void display() {
        cout << "a : " << a << ", b : " << b << ", c : " << c;
    }
};

int main() {
    MyClass my_obj(5);
    my_obj.display();
    return 0;
}

আউটপুট

a : 0, b : 0, c : 5

  1. C++-এ কনস্ট্রাক্টরে ভেক্টর পাস করা (Passing a vector to constructor in C++)

  2. C++ ডিফল্ট কনস্ট্রাক্টর (Default Constructor)

  3. C++-এ কপি কনস্ট্রাক্টর বনাম অ্যাসাইনমেন্ট অপারেটর

  4. C++-এ কপি কনস্ট্রাক্টর