পয়েন্টার টু অবজেক্ট (Pointer to Object) এবং this পয়েন্টার (this Pointer) C++ প্রোগ্রামিংয়ের দুটি গুরুত্বপূর্ণ পয়েন্টার ধারণা, যা অবজেক্টের সাথে সরাসরি কাজ করার সুবিধা দেয়। নিচে এই দুটি বিষয়ে বিস্তারিত আলোচনা করা হলো।
পয়েন্টার টু অবজেক্ট (Pointer to Object)
পয়েন্টার টু অবজেক্ট হলো এমন একটি পয়েন্টার, যা কোনো নির্দিষ্ট ক্লাসের অবজেক্টের ঠিকানা ধারণ করে। সাধারণ পয়েন্টার যেমন কোনো ভ্যারিয়েবলের ঠিকানা ধারণ করতে পারে, তেমনিভাবে পয়েন্টার টু অবজেক্ট কোনো অবজেক্টের ঠিকানা ধরে রাখতে পারে এবং সেই অবজেক্টের ডেটা মেম্বার ও মেম্বার ফাংশন অ্যাক্সেস করতে পারে।
উদাহরণ: পয়েন্টার টু অবজেক্ট
#include <iostream>
using namespace std;
class Car {
public:
string brand;
int year;
void displayInfo() {
cout << "Brand: " << brand << ", Year: " << year << endl;
}
};
int main() {
Car car1; // Car ক্লাসের একটি অবজেক্ট তৈরি
car1.brand = "Toyota";
car1.year = 2020;
Car *ptr = &car1; // car1 অবজেক্টের ঠিকানা ধরে রাখা হলো
// পয়েন্টার ব্যবহার করে অবজেক্টের মেম্বার অ্যাক্সেস
ptr->displayInfo(); // Output: Brand: Toyota, Year: 2020
return 0;
}
বর্ণনা:
- এখানে
car1নামে একটি অবজেক্ট তৈরি করা হয়েছে এবংCar *ptrএর মাধ্যমেcar1এর ঠিকানা পয়েন্টারে ধরে রাখা হয়েছে। ptr->displayInfo()দিয়ে পয়েন্টার ব্যবহার করে অবজেক্টের মেম্বার ফাংশনdisplayInfo()অ্যাক্সেস করা হয়েছে।- পয়েন্টার টু অবজেক্ট ব্যবহার করে অবজেক্টের ডেটা মেম্বার বা মেম্বার ফাংশনে অ্যাক্সেস করতে
->(arrow) অপারেটর ব্যবহার করা হয়।
পয়েন্টার টু অবজেক্টের সুবিধা
১. অবজেক্টের মেমোরি অ্যাড্রেস অ্যাক্সেস: এটি সরাসরি অবজেক্টের ঠিকানা নিয়ে কাজ করতে পারে, যা মেমোরি ব্যবস্থাপনায় সহায়ক। ২. ডাইনামিক অবজেক্ট তৈরি: পয়েন্টার ব্যবহার করে ডাইনামিক্যালি অবজেক্ট তৈরি এবং পরিচালনা করা যায়। ৩. কয়েকটি অবজেক্ট একসাথে পরিচালনা: একই ক্লাসের একাধিক অবজেক্ট তৈরি করলে, তাদের পয়েন্টার ব্যবহার করে সহজেই পরিচালনা করা যায়।
this পয়েন্টার (this Pointer)
this পয়েন্টার হলো C++ এর একটি বিশেষ পয়েন্টার, যা প্রতিটি অবজেক্টের জন্য ক্লাসের ভিতরে স্বয়ংক্রিয়ভাবে তৈরি হয়। এটি বর্তমানে যে অবজেক্টে কাজ চলছে, তার ঠিকানা নির্দেশ করে। মেম্বার ফাংশনের ভিতরে this পয়েন্টার ব্যবহার করা হয়।
this পয়েন্টারের ব্যবহার
১. মেম্বার ভ্যারিয়েবল এবং প্যারামিটার ভ্যারিয়েবল পৃথক করা: যদি মেম্বার ভ্যারিয়েবল এবং ফাংশনের প্যারামিটার একই নামে হয়, তখন this পয়েন্টার ব্যবহার করে মেম্বার ভ্যারিয়েবলকে শনাক্ত করা যায়। ২. চেইনিং: ফাংশনের মধ্যে this পয়েন্টার ব্যবহার করে ফাংশন চেইনিং করা যায়।
উদাহরণ: this পয়েন্টার ব্যবহার করে মেম্বার অ্যাক্সেস
#include <iostream>
using namespace std;
class Car {
private:
string brand;
int year;
public:
// কনস্ট্রাক্টর
Car(string brand, int year) {
this->brand = brand; // this পয়েন্টার ব্যবহার করে মেম্বার অ্যাক্সেস
this->year = year;
}
// মেম্বার ফাংশন
void displayInfo() {
cout << "Brand: " << this->brand << ", Year: " << this->year << endl;
}
};
int main() {
Car car1("Toyota", 2020);
car1.displayInfo(); // Output: Brand: Toyota, Year: 2020
return 0;
}
বর্ণনা:
- এখানে
Carক্লাসের কনস্ট্রাক্টরের মধ্যেbrandএবংyearনামে দুটি মেম্বার ভ্যারিয়েবল এবং দুটি প্যারামিটার একই নামে রয়েছে। this->brandএবংthis->yearব্যবহার করে মেম্বার ভ্যারিয়েবলকে প্যারামিটার থেকে আলাদা করা হয়েছে।thisপয়েন্টার প্রতিটি অবজেক্টের জন্য আলাদা হয় এবং বর্তমান অবজেক্টের ঠিকানা নির্দেশ করে।
পয়েন্টার টু অবজেক্ট এবং this পয়েন্টারের পার্থক্য
| বৈশিষ্ট্য | পয়েন্টার টু অবজেক্ট | this পয়েন্টার |
|---|---|---|
| উদ্দেশ্য | নির্দিষ্ট অবজেক্টের ঠিকানা ধরে রাখে | বর্তমান অবজেক্টের ঠিকানা নির্দেশ করে |
| ব্যবহারের স্থান | ক্লাসের বাইরে থেকে অবজেক্ট অ্যাক্সেসে ব্যবহৃত হয় | শুধুমাত্র ক্লাসের ভিতরে ব্যবহৃত হয় |
| কাস্টম পয়েন্টার | হ্যাঁ, অবজেক্টের ঠিকানা ধরে রাখতে আলাদা পয়েন্টার তৈরি করা যায় | না, C++ নিজেই this পয়েন্টার তৈরি করে |
| অ্যাক্সেস স্টাইল | -> অপারেটরের মাধ্যমে মেম্বার অ্যাক্সেস | this-> ব্যবহার করে মেম্বার অ্যাক্সেস |
ডাইনামিক অবজেক্ট তৈরি এবং পয়েন্টার টু অবজেক্ট
C++ এ new অপারেটর ব্যবহার করে ডাইনামিক্যালি অবজেক্ট তৈরি করা যায় এবং পয়েন্টারের মাধ্যমে তা অ্যাক্সেস করা যায়।
#include <iostream>
using namespace std;
class Car {
public:
string brand;
int year;
Car(string b, int y) {
brand = b;
year = y;
}
void displayInfo() {
cout << "Brand: " << brand << ", Year: " << year << endl;
}
};
int main() {
// ডাইনামিক্যালি অবজেক্ট তৈরি
Car *ptr = new Car("Honda", 2021);
// পয়েন্টার দিয়ে মেম্বার ফাংশন কল
ptr->displayInfo(); // Output: Brand: Honda, Year: 2021
delete ptr; // ডাইনামিক মেমোরি মুক্ত করা
return 0;
}
বর্ণনা:
new Car("Honda", 2021);ব্যবহার করে ডাইনামিক্যালিCarঅবজেক্ট তৈরি করা হয়েছে এবং এটিptrপয়েন্টারে সংরক্ষণ করা হয়েছে।delete ptr;স্টেটমেন্ট ব্যবহার করে মেমোরি মুক্ত করা হয়েছে।
সারসংক্ষেপ
- পয়েন্টার টু অবজেক্ট: একটি পয়েন্টার, যা নির্দিষ্ট অবজেক্টের ঠিকানা ধরে রাখে এবং
->অপারেটর ব্যবহার করে সেই অবজেক্টের মেম্বার অ্যাক্সেস করা যায়। thisপয়েন্টার: C++ এর একটি বিশেষ পয়েন্টার, যা বর্তমান অবজেক্টের ঠিকানা নির্দেশ করে এবং সাধারণত মেম্বার ভ্যারিয়েবল এবং প্যারামিটার আলাদা করতে বা চেইনিংয়ের জন্য ব্যবহৃত হয়।
পয়েন্টার টু অবজেক্ট এবং this পয়েন্টার ব্যবহারে মেমোরি ব্যবস্থাপনা ও অবজেক্ট ম্যানিপুলেশন সহজ হয়, যা প্রোগ্রামিংয়ে আরও কার্যকর ও শক্তিশালী নিয়ন্ত্রণ প্রদান করে।
Read more