ফ্রেন্ড ফাংশন (Friend Function) এবং ফ্রেন্ড ক্লাস (Friend Class) C++ এ ব্যবহৃত বিশেষ ফিচার, যা ক্লাসের প্রাইভেট (private) এবং প্রোটেকটেড (protected) মেম্বারগুলোতে বাইরের ফাংশন বা অন্য ক্লাসের অ্যাক্সেসের অনুমতি দেয়। সাধারণত, ক্লাসের প্রাইভেট মেম্বারে সরাসরি বাইরের অ্যাক্সেস অনুমোদিত নয়, কিন্তু ফ্রেন্ড ফাংশন বা ফ্রেন্ড ক্লাসের মাধ্যমে সেই সীমাবদ্ধতা দূর করা যায়।
ফ্রেন্ড ফাংশন (Friend Function)
ফ্রেন্ড ফাংশন হলো একটি ফাংশন, যা কোনো ক্লাসের private এবং protected মেম্বারে সরাসরি অ্যাক্সেস করতে পারে। এই ফাংশনকে ফ্রেন্ড করার জন্য ক্লাসে friend কীওয়ার্ড ব্যবহার করে ঘোষণা করা হয়।
উদাহরণ: ফ্রেন্ড ফাংশন
#include <iostream>
using namespace std;
class Box {
private:
int width;
public:
Box(int w) : width(w) {} // কন্সট্রাক্টর
// ফ্রেন্ড ফাংশন ঘোষণা
friend void displayWidth(Box &b);
};
// ফ্রেন্ড ফাংশন ডেফিনেশন
void displayWidth(Box &b) {
cout << "Width: " << b.width << endl; // প্রাইভেট মেম্বারে অ্যাক্সেস
}
int main() {
Box myBox(10); // Box অবজেক্ট তৈরি
displayWidth(myBox); // ফ্রেন্ড ফাংশন কল
return 0;
}
বর্ণনা:
- এখানে
Boxক্লাসেরwidthনামের একটি প্রাইভেট মেম্বার আছে। displayWidth()নামে একটি ফাংশনBoxক্লাসের ফ্রেন্ড ফাংশন হিসেবে ঘোষণা করা হয়েছে।displayWidth()ফাংশনwidthমেম্বারে সরাসরি অ্যাক্সেস করতে সক্ষম, কারণ এটিBoxক্লাসের ফ্রেন্ড ফাংশন।
ফ্রেন্ড ফাংশনের বৈশিষ্ট্য
- অ্যাক্সেস স্পেসিফায়ার: ফ্রেন্ড ফাংশন ক্লাসের কোনো মেম্বার হতে হবে না এবং এটি
public,private, এবংprotectedমেম্বারে সরাসরি অ্যাক্সেস করতে পারে। - অবজেক্টের মাধ্যমে অ্যাক্সেস: ফ্রেন্ড ফাংশন ক্লাসের অবজেক্টের মাধ্যমে প্রাইভেট মেম্বার অ্যাক্সেস করে।
- নিমন্ত্রিত ফাংশন: একটি ফ্রেন্ড ফাংশন ক্লাসের বাইরে সংজ্ঞায়িত করা হয় এবং তাকে মেম্বার ফাংশনের মতো
::অপারেটর ব্যবহার করে কল করতে হয় না।
ফ্রেন্ড ক্লাস (Friend Class)
ফ্রেন্ড ক্লাস হলো একটি ক্লাস, যা আরেকটি ক্লাসের সমস্ত private এবং protected মেম্বারে সরাসরি অ্যাক্সেস করতে পারে। friend কীওয়ার্ড ব্যবহার করে একটি ক্লাসকে অন্য ক্লাসের ফ্রেন্ড করা যায়। ফ্রেন্ড ক্লাস মূলত তখনই ব্যবহৃত হয়, যখন দুটি ক্লাস ঘনিষ্ঠভাবে সম্পর্কিত হয় এবং একে অপরের তথ্য অ্যাক্সেসের প্রয়োজন হয়।
উদাহরণ: ফ্রেন্ড ক্লাস
#include <iostream>
using namespace std;
class Engine {
private:
int horsepower;
public:
Engine(int hp) : horsepower(hp) {}
// Car ক্লাসকে friend হিসেবে ঘোষণা করা
friend class Car;
};
class Car {
public:
void showHorsepower(Engine &e) {
cout << "Horsepower: " << e.horsepower << endl; // প্রাইভেট মেম্বারে অ্যাক্সেস
}
};
int main() {
Engine engine(300); // Engine অবজেক্ট তৈরি
Car car;
car.showHorsepower(engine); // Car ক্লাসের মাধ্যমে horsepower দেখানো
return 0;
}
বর্ণনা:
- এখানে
Engineক্লাসেhorsepowerনামে একটি প্রাইভেট মেম্বার আছে। Carক্লাসকেEngineক্লাসের ফ্রেন্ড ক্লাস হিসেবে ঘোষণা করা হয়েছে, যার ফলেCarক্লাসEngineএর প্রাইভেট মেম্বারhorsepower-এ অ্যাক্সেস করতে পারে।Carক্লাসেরshowHorsepower()মেম্বার ফাংশনengineঅবজেক্টেরhorsepowerমেম্বার অ্যাক্সেস করতে সক্ষম, কারণ এটি ফ্রেন্ড ক্লাস।
ফ্রেন্ড ফাংশন এবং ফ্রেন্ড ক্লাসের ব্যবহারিক প্রয়োগ
- ক্লাসগুলির মধ্যে ঘনিষ্ঠ সম্পর্ক: যখন দুটি ক্লাসের মধ্যে ঘনিষ্ঠ সম্পর্ক থাকে এবং তাদের মধ্যে একটি ক্লাসের তথ্য আরেকটি ক্লাস ব্যবহার করতে হয়, তখন ফ্রেন্ড ক্লাস ব্যবহার করা হয়।
- ডেটা হাইডিং বজায় রেখে অ্যাক্সেস: ফ্রেন্ড ফাংশন বা ফ্রেন্ড ক্লাস ব্যবহার করে প্রাইভেট এবং প্রোটেকটেড ডেটা হাইডিং বজায় রেখে নির্দিষ্ট ফাংশন বা ক্লাসকে অ্যাক্সেস অনুমতি দেওয়া যায়।
- অপারেটর ওভারলোডিং: বিশেষ ক্ষেত্রে অপারেটর ওভারলোডিংয়ের সময় ফ্রেন্ড ফাংশন ব্যবহার করা হয়, যাতে বাইরের অপারেটর ফাংশন ক্লাসের প্রাইভেট মেম্বারে অ্যাক্সেস করতে পারে।
ফ্রেন্ড ফাংশন এবং ফ্রেন্ড ক্লাস ব্যবহারের কিছু সতর্কতা
- ডেটা এনক্যাপসুলেশন ক্ষতি: ফ্রেন্ড ফাংশন বা ফ্রেন্ড ক্লাস ব্যবহার করলে ক্লাসের ডেটা এনক্যাপসুলেশন নীতি কিছুটা ক্ষতিগ্রস্ত হতে পারে, কারণ বাইরের ফাংশন বা ক্লাস প্রাইভেট ডেটা অ্যাক্সেস করতে পারে।
- অতিরিক্ত ফ্রেন্ডশিপ: ক্লাসে অতিরিক্ত ফ্রেন্ড ফাংশন বা ক্লাস যোগ করা ডেটা সুরক্ষার সমস্যা সৃষ্টি করতে পারে। তাই শুধুমাত্র প্রয়োজনীয় ফাংশন বা ক্লাসকেই ফ্রেন্ড করতে হবে।
- মডুলারিটি বজায় রাখা: ফ্রেন্ড ফাংশন এবং ফ্রেন্ড ক্লাস ব্যবহার করার সময় ক্লাসের মডুলারিটি বজায় রাখতে হবে এবং অনাবশ্যক ফ্রেন্ডশিপ এড়াতে হবে।
সারসংক্ষেপ
- ফ্রেন্ড ফাংশন হলো এমন একটি ফাংশন, যা ক্লাসের প্রাইভেট এবং প্রোটেকটেড মেম্বারে সরাসরি অ্যাক্সেস করতে পারে।
- ফ্রেন্ড ক্লাস হলো একটি ক্লাস, যা অন্য একটি ক্লাসের সমস্ত প্রাইভেট এবং প্রোটেকটেড মেম্বারে সরাসরি অ্যাক্সেস করতে পারে।
- ফ্রেন্ড ফাংশন এবং ফ্রেন্ড ক্লাস বিশেষ ক্ষেত্রে ব্যবহৃত হয়, যখন দুটি ক্লাসের মধ্যে ঘনিষ্ঠ সম্পর্ক থাকে এবং নির্দিষ্ট মেম্বারে অ্যাক্সেসের প্রয়োজন হয়।
ফ্রেন্ড ফাংশন এবং ফ্রেন্ড ক্লাস C++ এ ডেটা অ্যাক্সেসibilটি নিয়ন্ত্রণের জন্য এবং নির্দিষ্ট পরিস্থিতিতে ডেটা হাইডিং বজায় রেখে প্রাইভেট মেম্বারে অ্যাক্সেসের সুবিধার্থে ব্যবহৃত হয়।
Read more