এখানে আমরা ক্লাস ইন্টারনাল দেখব। তার আগে আমরা ডিফল্ট কনস্ট্রাক্টর দেখব, যেগুলো ইন্টারনালের সাথে সম্পর্কিত। ডিফল্ট কনস্ট্রাক্টর হল একটি কনস্ট্রাক্টর (ব্যবহারকারী বা কম্পাইলার দ্বারা সংজ্ঞায়িত) যেটি কোন আর্গুমেন্ট নেয় না। এখন প্রশ্ন আসে, কেন ডিফল্ট কনস্ট্রাক্টর ব্যবহার করা হয়?
যদি ডিফল্ট কনস্ট্রাক্টর দেওয়া না হয়, কম্পাইলার স্পষ্টভাবে ডিফল্ট কনস্ট্রাক্টর ঘোষণা করবে। ডিফল্ট কনস্ট্রাক্টর কিছু ক্লাস ইন্টারনাল শুরু করতে ব্যবহার করা হয়। এটি ক্লাসের ডেটা সদস্যকে প্রভাবিত করবে না। কম্পাইলার কিছু ভিন্ন পরিস্থিতিতে ডিফল্ট কনস্ট্রাক্টর সন্নিবেশ করায়। ধরুন একটি ক্লাস ডিফল্ট কনস্ট্রাক্টর সহ অন্য ক্লাস থেকে বা ডিফল্ট কনস্ট্রাক্টর সহ অন্য কোনও ক্লাসের একটি ক্লাস অবজেক্ট থেকে উদ্ভূত হয়েছে। কম্পাইলার বেস ক্লাস বা বর্তমান অবজেক্টের ভিতরে স্থাপন করা বস্তুর জন্য ডিফল্ট কনস্ট্রাক্টরকে কল করার জন্য কোড সন্নিবেশ করায়।
আসুন ধারণা পেতে একটি কোড দেখি।
উদাহরণ
#include<iostream>
using namespace std;
class Base {
public:
// compiler will create one constructor for the class "Base"
};
class ClassA {
public:
ClassA(){
cout << "ClassA Constructor defined by user" << endl;
}
int x; //it will not be initialized
};
class ClassB : public ClassA {
//compiler will create ClassB constructor and add some code to call
ClassA constructor
};
class ClassC : public ClassA {
public:
ClassC() { //user defined consturctor, but compiler will add
code to call A constructor
cout << "User defined ClassC Constructor" << endl;
}
};
class ClassD {
public:
ClassD(){
// User defined default constructor. The compiler will add
code to call object of 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