আজকে মূলত আমরা তেমন কিছু জানব না তবে class এবং Object সম্পর্কে জানব ।
Class in C++
আমরা যেমন struct এ কাজ করতাম সেম বিষয়টাই এখানে আছে । কিন্তু এই ২ টা বিষয়ের মধ্যে অনেক বড় একটা পার্থক্য আছে । জেটা আমরা পার্ট ২ তে জেনে এসেছি । সেঁটা হলো class এ কোণ কিছুর ব্যবহার রাখতে পারি (methods) আবার কিছু keyword বা অ্যাক্সেস মডিফায়ার এর মাধ্যমে privet, public এবং potected করে রাখতে পারি । কিন্তু struct এ শুধু ডাটা রাখার সুবিধা ছিল ।
যেমনঃ যখন একজন বাক্তি একটি ব্যাঙ্ক অ্যাকাউন্ট খোলে তখন তার একজন নমেনি প্রয়োজন হয় । ধরুন আমরা struct দিয়েই কাজ গুলো করছি । এখানে কি সমস্যা হবে বলতে পারেন ? নমেনি চাইলেই তার balance, password এগুলো জানতে পারবে । কিন্তু চিন্তা করুন যদি অ্যাকাউন্ট ধারির নাম, এলাকা, বাসা এগুলো নমেনি জানে তাহলে কি কোন সমস্যা হবে । হবে না । এই যে কোন বিষয় আর একজন দেখলে সমস্যা নেই । কোনটা দেখলে সমস্যা হতে পারে । এই জন্য class এর ব্যবহার আপনাকে জানতে হবে ।
আর নাম, balance এগুলো হচ্ছে অ্যাকাউন্ট ধারির object
#include <iostream>
using namespace std;
class Student {
public:
char name[100];
int roll;
};
int main() {
Student rashedul;
rashedul.name = "dsnfb"; // 😑😑😑 its not possible in c or c++
strcpy(rashedul.name, "rashedul islamic");
rashedul.roll = 10;
cout << rashedul.name << " " << rashedul.roll << endl;
return 0;
}
Encapsulations in C++
Encapsulations মানে ডাটা,মেথড গুলো একটা স্থানে সুন্দর করে securely রাখা ।
অ্যাক্সেস মোডিফায়ার গুলর মধ্যে public বাদে অন্ন গুল বাহির থেকে বা main function থেকে অ্যাক্সেস করা যাবে না ।
#include <iostream>
using namespace std;
class Student{
public:
int x;
void sayHi(){
cout << "Hi" << endl;
};
private:
int y;
protected:
int z;
};
int main(){
Student hi;
hi.x = 10;
hi.sayHi();
// privet and protected not accessable from main function or outside
hi.y = 20; // ❌🚫
hi.z = 20; // ❌🚫
return 0;
}
Basic constructor concepts in c++
c++ এ constructor বানাতে গেলে যেনামে আপনার ক্লাসটা থাকবে সেই নামেই একটা ফাংশন বানাতে হবে ।
#include <bits/stdc++.h>
using namespace std;
class Example {
public:
int x, y, z;
Example(int a, int b, int c) {
x = a; y = b; z = c;
}
};
int main(){
/* ------------------------ without constructor ------------------------
Example obj;
obj.x = 10; obj.y = 20; obj.z = 30;
cout << obj.x << obj.y << obj.z << endl;
*/
// ---- with constructor ----
Example obj2(10, 20, 30);
cout << obj2.x << obj2.y << obj2.z << endl;
return 0;
}
নোটঃ আপনি আপনার ভেরিয়াবল গুলোকে পাবলিক, প্রাইভেট যা খুশি রাখতে পারেন । তবে constructor কে পাবলিক রাখতে হবে । যদি আপনি ভেরিয়াবল পাবলিক না অন্য অ্যাক্সেস মডিফায়ার ব্যবহার করেন তাহলে বাহির থেকে অ্যাক্সেস করা যাবে না । তখন আসবে setter, getter এর কন্সেপ্ট ।
#include <bits/stdc++.h>
using namespace std;
class Example{
private:
int x;
public:
void setter(int a) { x = a; }
int getter() { return x; }
};
int main(){
// ----- getter, setter exapmpe ------
Example hello;
hello.setter(20);
cout << hello.getter() << endl;
return 0;
}
Inheritance
......... -------=====.................==--------............
#include <bits/stdc++.h>
using namespace std;
class Parent{
public:
int x;
private:
int y;
protected:
int z;
public:
Parent(int a, int b, int c){x = a; y = b; z = c;};
};
class Child : public Parent{
public:
int xx;
Child(int aa, int a, int b, int c) : Parent(a, b, c){ 👈👈👈👈👈👈👈👈👈
xx = aa;
};
};
int main(){
Parent pt(10, 20, 30);
Child ch(100, 10, 20, 30);
cout << "parent's value access from child. x= " << ch.x << " y= " << ch.xx << endl;
return 0;
}
Polymorphism
কোন ডাটার উপর ভিত্তি করে বিভিন্ন রূপ ধারণ করতে পারে ।, যেমনঃ মানুষ হলে কথা বলতে পারে , বিড়াল হলে মিউ মিউ করে ।
Function Overloading
একয় নামের ফাংশন যখন ভিন্ন ভিন্ন কাজ করবে তখন তাকে Function Overloading বলব । যেমনঃ
আমরা এখানে সেম নামের ফাংশন ব্যবহার করে উদাহরণ দেখব । এবং দেখবে কে কাকে টাইপ ভিত্তক রেফার করে ।
#include <bits/stdc++.h>
using namespace std;
class Example{
public:
int add(int a, int b){ // double type প্যারামিটার
cout << "msg: int addition\t";
return a + b;
}
int add(double a, double b){ // double type প্যারামিটার
cout << "msg: double addition\t";
return a + b;
}
};
int main(){
Example ex;
cout << ex.add(10, 20) << endl; // এটা int type প্যারামিটার ওয়ালা ফাংশনকে রেফার করবে ।
cout << ex.add(10.90, 20.80) << endl; // এটা double type প্যারামিটার ওয়ালা ফাংশনকে রেফার করবে ।
return 0;
}
operator over loading
এই যে আগের উদাহরণটা থেকে কম্পাইলের সময় বুঝতে পারছে কখন কোন ফাংশনটা ব্যবহার হবে এটা হচ্ছে operator over loading.
Friend Class in C++
এখানে আমরা এমন একটা কন্সেপ্ট দেখতে যাচ্ছি জেটা হল ধর তোমার আব্বুর একজন বন্ধু আছে সে তোমার বাবার ব্যাঙ্ক ব্যাল্যান্স জানেন । তুমি তার থেকে জানতে চাইলে তোমার বাবার এখন ব্যাল্যান্স কত । এটা কিভাবে তোমার বাবার বন্ধু বলবে সেটাই দেখব ।
#include <bits/stdc++.h>
using namespace std;
class Parent{
private:
int taka;
public:
Parent(int x){
taka = x;
}
friend class myFnd;
};
class myFnd{
public:
void tellSecret(Parent *ptr){
cout << "parent balance is " << ptr->taka << endl;
}
};
int main(){
Parent pt(10);
myFnd mf;
mf.tellSecret(&pt);
return 0;
}
Friend Function in c++
আগের সব কোড সেম থাকবে শুধু প্যারেন্ট থেকে ক্লাস এর মাধ্যমে যেভাবে অ্যাক্সেস করলাম সেটা না করে একটা ফাংশন বানাব ।
#include <bits/stdc++.h>
using namespace std;
class Parent{
private:
int taka;
public:
Parent(int x){
taka = x;
}
friend void tellSecret(Parent *ptr);
};
// friend function
void tellSecret(Parent *ptr){
cout << "parent balance is " << ptr->taka << endl;
}
int main(){
Parent pt(10);
tellSecret(&pt);
return 0;
}