নির্দিষ্ট বই ফলো করলে বেশি উপকার পাবেন। বইয়ে অনেক কিছু লেখা থাকে যেগুলা পড়লে কনসেপ্ট ক্লিয়ার হয়ে যায়। মোটামুটি ধারণার জন্য একটু উদাহরণ দিইঃ
Polymorphism:
একই অবজেক্ট বা অপারেটর পরিস্থিতি ভেদে ভিন্ন আচরণ করবে। যেমনঃ
1 + 2 /* + অপারেটর এখানে যোগ করার জন্য ব্যবহার হচ্ছে */
“Hello” + “World” /* + অপারেটর এখানে স্ট্রিং কনক্যাটিনেশনের জন্য ব্যবহার হচ্ছে */
Encapsulation:
এটি ডাটার সাথে ডাটা একসেস বা পরিবর্তন করতে পারে এমন ফাংশন কে সম্পর্কযুক্ত করে। যেমন আমাদের হয়তো একটা ক্লাস আছে Student:
class Student
{
string id;
string name;
….. ইত্যাদি
};
এখন কেউ যদি Student ক্লাসের একটা অবজেক্ট এর name বের করতে চায়, কীভাবে করবে?
Student s; /* s হচ্ছে Student এর অবজেক্ট */
string n = s.name;
Encapsulation বলছে এভাবে ডাটা এক্সেস করা বিপদজনক। ডাটা এক্সেস করতে হবে ওই অবজেক্টের ফাংশন ব্যবহার করে। যেমনঃ
class Student
{
string id;
string name;
….. ইত্যাদি
public string get_name()
{
return name;
}
public string get_id()
{
return id;
}
};
সুতরাং ইউজার স্টুডেন্ট অবজেক্টের name একসেস করবে এভাবেঃ
Student s;
String n = s.get_name();
Inheritance:
ধরি একটা ক্লাস আছে রেকট্যাংগলের জন্য।
class Rectangle
{
int width;
int height;
public:
void set_values(int w, int h) { width = w; height = h; }
int get_area() { return width * height; }
};
কোন ফাংশনের কি কাজ আশা করছি কোড দেখেই বুঝবেন। এখন নতুন একটা ক্লাসের দরকার হল, স্কোয়ার। রেকট্যাংগল ক্লাসের যেসব ফীচার সেগুলোই দরকার এই ক্লাসেও (ভ্যালু সেট, এরিয়া বের করা এসব)। নতুন করে এসব ইমপ্লিমেন্ট করার দরকার আছে? Inheritance বলছে নেই।
class Square : public Rectangle
{
};
এখানে রেকট্যাংগল ক্লাসের পাবলিক প্রোপার্টিগুলো ইনহেরিট করা হয়েছে। এখনঃ
Square s;
s.set_values(5, 5);
cout<<s.get_area();
এভাবেই স্কোয়ার ক্লাসের প্রোপার্টি পরিবর্তন ও ব্যবহার করা যাবে।
আগেই বলেছি এখানে হালকা একটা ধারণা দিতে চেষ্টা করেছি। পরিস্কার ধারণা পাওয়ার জন্য বই পড়তে হবে।
বিঃ দ্রঃ উদাহরণ গুলো সিম্পল রাখার জন্য এখানে this কি ওয়ার্ড ব্যবহৃত হইলো না।