সি++-তে স্ট্রাকচার ও ক্লাস মূলত একই। কিন্তু কিছু মাইনর পার্থক্য রয়েছে। পার্থক্যগুলো নিচে দেওয়া হলো।
ক্লাসের মেম্বার ডিফল্টভাবে প্রাইভেট, কিন্তু স্ট্রাকচারের মেম্বার পাবলিক। নিচের দুটি কোড দেখুন পার্থক্য বুঝতে।
উদাহরণ: ক্লাস (প্রাইভেট ডিফল্ট)
#include <iostream>
using namespace std;
class my_class {
int x = 10;
};
int main() {
my_class my_ob;
cout << my_ob.x; // কম্পাইল এরর: x প্রাইভেট
}
আউটপুট
এই প্রোগ্রাম কম্পাইল হবে না। প্রাইভেট ডেটা মেম্বারের জন্য কম্পাইল টাইম এরর।
উদাহরণ: স্ট্রাকচার (পাবলিক ডিফল্ট)
#include <iostream>
using namespace std;
struct my_struct {
int x = 10;
};
int main() {
my_struct my_ob;
cout << my_ob.x; // কাজ করবে
}
আউটপুট
10
যখন একটি স্ট্রাকচার ক্লাস বা স্ট্রাকচার থেকে ডেরাইভ করা হয়, তবে বেস ক্লাসের ডিফল্ট অ্যাক্সেস স্পেসিফায়ার পাবলিক, কিন্তু ক্লাস ডেরাইভ করলে ডিফল্ট প্রাইভেট।
উদাহরণ: ক্লাস থেকে ক্লাস ডেরাইভ (প্রাইভেট ডিফল্ট)
#include <iostream>
using namespace std;
class my_base_class {
public:
int x = 10;
};
class my_derived_class : my_base_class { }; // ডিফল্ট প্রাইভেট ইনহেরিটেন্স
int main() {
my_derived_class d;
cout << d.x; // কম্পাইল এরর: x অ্যাক্সেসিবল নয়
}
আউটপুট
কম্পাইল হবে না। বেস ক্লাসের x ভেরিয়েবল অ্যাক্সেসিবল নয় বলে এরর।
উদাহরণ: ক্লাস থেকে স্ট্রাকচার ডেরাইভ (পাবলিক ডিফল্ট)
#include <iostream>
using namespace std;
class my_base_class {
public:
int x = 10;
};
struct my_derived_struct : my_base_class { }; // ডিফল্ট পাবলিক ইনহেরিটেন্স
int main() {
my_derived_struct d;
cout << d.x; // কাজ করবে
}
আউটপুট
10