OOP concepts in c++ { class, object } [part 3]

OOP concepts in c++ { class, object } [part 3]

আজকে মূলত আমরা তেমন কিছু জানব না তবে 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;
}

Did you find this article valuable?

Support Rashedul Islam by becoming a sponsor. Any amount is appreciated!