কম্পিউটার টিউটোরিয়াল

C++-এ 'friend' কখন ব্যবহার করা উচিত?


একটি ক্লাসের ফ্রেন্ড ফাংশন সেই ক্লাসের স্কোপের বাইরে ডিফাইন করা হয় কিন্তু সেটি ক্লাসের সকল প্রাইভেট এবং প্রটেক্টেড মেম্বার অ্যাক্সেস করার অধিকার রাখে। যদিও ফ্রেন্ড ফাংশন들의 প্রোটোটাইপ ক্লাস ডেফিনিশনে থাকে, তবুও ফ্রেন্ডরা মেম্বার ফাংশন নয়।

একটি ফ্রেন্ড হতে পারে একটি ফাংশন, ফাংশন টেমপ্লেট, বা মেম্বার ফাংশন, অথবা একটি ক্লাস বা ক্লাস টেমপ্লেট, যেক্ষেত্রে পুরো ক্লাস এবং এর সকল মেম্বার ফ্রেন্ড হয়।

একটি ফাংশনকে একটি ক্লাসের ফ্রেন্ড হিসেবে ডিক্লেয়ার করতে, ক্লাস ডেফিনিশনে ফাংশন প্রোটোটাইপের আগে friend কীওয়ার্ড লিখুন নিচের মত করে:

class Box {
    double width;
public:
    double length;
    friend void printWidth(Box box);
    void setWidth(double wid);
};

ক্লাস ClassTwo-এর সকল মেম্বার ফাংশনকে ক্লাস ClassOne-এর ফ্রেন্ড হিসেবে ডিক্লেয়ার করতে, ক্লাস ClassOne-এর ডেফিনিশনে নিচের ডিক্লেয়ারেশন রাখুন:

উদাহরণ

friend class ClassTwo;
// উদাহরণস্বরূপ,
#include <iostream>
using namespace std;
class Box {
    double width;
public:
    friend void printWidth(Box box);
    void setWidth(double wid);
};
// মেম্বার ফাংশন ডেফিনিশন
void Box::setWidth(double wid) {
    width = wid;
}
// নোট: printWidth() যেকোনো ক্লাসের মেম্বার ফাংশন নয়।
void printWidth(Box box) {
    /* কারণ printWidth() Box-এর ফ্রেন্ড, সেজন্য এটি এই ক্লাসের যেকোনো মেম্বার সরাসরি অ্যাক্সেস করতে পারে */
    cout << "Width of box: " << box.width << endl;
}
// প্রোগ্রামের মেইন ফাংশন
int main() {
    Box box;
    // মেম্বার ফাংশন ছাড়া বক্সের প্রস্থ সেট করুন
    box.setWidth(10.0);
    // ফ্রেন্ড ফাংশন ব্যবহার করে প্রস্থ প্রিন্ট করুন
    printWidth(box);
    return 0;
}

আউটপুট

এটি নিচের আউটপুট দেবে:

Width of box: 10

মেম্বার ফাংশন না হলেও, ফাংশনটি ক্লাসের মেম্বার ভেরিয়েবলগুলো সরাসরি অ্যাক্সেস করতে পারলো। এটি নির্দিষ্ট পরিস্থিতিতে খুব উপকারী হতে পারে।

  1. আপনার পিসিতে ReadyBoost ব্যবহার করা উচিত কিনা?

  2. জাভাস্ক্রিপ্টে Arrow Function কখন ব্যবহার করা উচিত নয়

  3. HDMI স্প্লিটার বনাম সুইচ: কখন কোনটি ব্যবহার করবেন

  4. রেইলসে Scopes বনাম Class Methods: কোন পদ্ধতি জিতবে?