[সি++ পর্ব ১৪.১] ফ্রেন্ড

0
16

সাধারণত একটি ক্লাসের প্রোটেক্টেড এবং প্রাইভেট মেম্বারগুলোকে সরাসরি এক্সেস করা যায় না। আরেকটি পাবলিক ফাংশন ক্লাসের মধ্যে ডিফাইন করে আমরা এ কাজটি করতে পারি। এছাড়াও আমরা এই কাজটি আরও এক ভাবে করতে পারি – ফ্রেন্ড ফাংশনের সাহায্যে। এই ফাংশনের মাধ্যমে প্রোটেক্টেড এবং প্রাইভেট মেম্বারগুলো এক্সেস করা যাবে, যদি friend কী-ওয়ার্ডটা দিয়ে এটি ক্লাসের মধ্যে ডিক্লেয়ার করে দেওয়া হয়। খেয়াল কর, এই ফ্রেন্ড ফাংশন কিন্তু ক্লাসের মেম্বার না

তবে শুধু ফাংশনই ফ্রেন্ড হবে, এমন কোনো কথা নেই। ফ্রেন্ড হতে পারে টেমপ্লেট, ক্লাসের মেম্বার কিংবা পুরো একটি ক্লাসই! আমরা প্রথমেই ফ্রেন্ড ফাংশন আলোচনা করবো।

যেভাবে ক্লাসের ভেতরে ফ্রেন্ড ফাংশনটি ডিক্লেয়ার করবো

কাজটা খুবই সহজ। ফাংশন ডিক্লারেশনের সাধারণ ফরম্যাটের আগে শুধু “friend” কী-ওয়ার্ডটা লাগিয়ে দিতে হবে। যেমন, নিচের কোডটি দেখঃ

ব্যস, হয়ে গেল! এবার আমরা পুরো কোডটি দেখি। আমরা আগের মতই width অ্যাসাইন করবো করবো। তবে সেটা প্রিন্ট করবো একটি friend function দিয়ে!

friend ক্লাস

এবার ধরা যাক, আমাদের কাছে দু’টি ক্লাস আছে – classOne এবং classTwo। আমরা যদি classTwo-এর সকল মেম্বারকে classOne-এর friend বানাতে চাই (অর্থাৎ classOne ক্লাসটা classTwo-এর সকল মেম্বার এক্সেস করতে পারবে), তাহলে classOne-এর ডেফিনিশনে লিখতে হবেঃ

বেশি কথা বাড়াচ্ছি না। কোড দেখলেই ব্যাপারটা বুঝতে পারবে!

এই কোডটা যা করে তা হল length, width, height-এর ইনপুট গ্রহণ করে। এখন আমরা চাই, আরেকটি ক্লাসের সাহায্যে এর আয়তন বের করতে। এখন আয়তন বের করার জন্য এর length, width, height-এর প্রতি আমাদের এক্সেস লাগবে, যেগুলো প্রাইভেট মেম্বার। কিন্তু আমরা পুরনো ক্লাসে নতুন কোনো ফাংশন ডিফাইন করতে পারবো না।

এ সমস্যা সমাধানের জন্যই আমরা সাহায্য নিব friend-এর। এজন্য আমাদের পুরনো ক্লাসে আমরা শুরুতেই লিখে ফেলবোঃ

এখন calc_volume ক্লাসটা Box ক্লাসের প্রাইভেট মেম্বার height, width, length এক্সেস করতে পারবে। তাহলে আমরা এবার আয়তন বের করার ফাংশনটা লিখে ফেলি!

খেয়াল কর, আমরা এই ফাংশনে প্যারামিটার হিসেবে একটা অবজেক্ট পাঠাচ্ছি। যে অবজেক্টের আয়তন তুমি বের করতে চাও, মেইন ফাংশনে সে অবজেক্টটাকেই এ ফাংশনের প্যারামিটার হিসেবে পাঠাতে হবে! পুরো কোডটি দেখ, তাহলেই বুঝতে পারবে!

আজ এ পর্যন্তই। আমরা আগামী পর্বে এই কাজগুলো ভিন্ন একভাবে করতে শিখবো, নাম তার ইনহ্যারিটেন্স!

LEAVE A REPLY

Please enter your comment!
Please enter your name here