এখানে আমরা ক্লাস ইন্টারনালস দেখব। তার আগে ডিফল্ট কনস্ট্রাক্টর দেখব, যা ইন্টারনালস से সম্পর্কিত। ডিফল্ট কনস্ট্রাক্টর হলো একটি কনস্ট্রাক্টর (ইউজার বা কম্পাইলার ডিফাইনড) যা কোনো আর্গুমেন্ট নেয় না। এখন প্রশ্ন আসে, ডিফল্ট কনস্ট্রাক্টর কেন ব্যবহার করা হয়?
যদি ডিফল্ট কনস্ট্রাক্টর না দেওয়া থাকে, কম্পাইলার ضمنভাবে ডিফল্ট কনস্ট্রাক্টর ডিক্লেয়ার করবে। ডিফল্ট কনস্ট্রাক্টর ক্লাস ইন্টারনালস ইনিশিয়ালাইজ করতে ব্যবহৃত হয়। এটি ক্লাসের ডেটা মেম্বারকে প্রভাবিত করে না। কম্পাইলার কিছু ভিন্ন পরিস্থিতিতে ডিফল্ট কনস্ট্রাক্টর ইনসার্ট করে। ধরে নিন একটি ক্লাস অন্য ক্লাস থেকে ডেরাইভড যা ডিফল্ট কনস্ট্রাক্টর সহ, বা একটি ক্লাস অন্য ক্লাসের অবজেক্ট ধারণ করে ডিফল্ট কনস্ট্রাক্টর সহ। কম্পাইলার বেস ক্লাস বা কারেন্ট অবজেক্টের ভিতরে রাখা অবজেক্টের জন্য ডিফল্ট কনস্ট্রাক্টর কল করার কোড ইনসার্ট করে।
আইডিয়া পাওয়ার জন্য একটি কোড দেখি।
উদাহরণ
#include<iostream>
using namespace std;
class Base {
public:
// কম্পাইলার ক্লাস "Base" এর জন্য একটি কনস্ট্রাক্টর তৈরি করবে
};
class ClassA {
public:
ClassA(){
cout << "ClassA Constructor defined by user" << endl;
}
int x; // এটি ইনিশিয়ালাইজ হবে না
};
class ClassB : public ClassA {
// কম্পাইলার ClassB কনস্ট্রাক্টর তৈরি করবে এবং ClassA কনস্ট্রাক্টর কল করার কোড যোগ করবে
};
class ClassC : public ClassA {
public:
ClassC() { // ইউজার ডিফাইনড কনস্ট্রাক্টর, কিন্তু কম্পাইলার A কনস্ট্রাক্টর কল করার কোড যোগ করবে
cout << "User defined ClassC Constructor" << endl;
}
};
class ClassD {
public:
ClassD(){
// ইউজার ডিফাইনড ডিফল্ট কনস্ট্রাক্টর। কম্পাইলার ClassA অবজেক্ট কল করার কোড যোগ করবে
cout << "User-defined consturctor for ClassD Constructor" << endl;
}
private:
ClassA obj;
};
int main() {
Base baseObj;
ClassB b;
ClassC c;
ClassD d;
}
আউটপুট
ClassA Constructor defined by user ClassA Constructor defined by user User defined ClassC Constructor ClassA Constructor defined by user User-defined consturctor for ClassD Constructor