C++-এ অবজেক্ট ফাংশনে পাস করার চারটি প্রধান পদ্ধতি রয়েছে। ধরা যাক আপনার একটি ক্লাস X আছে এবং সেটি একটি ফাংশন fun-এ পাস করতে চান, তাহলে:
ভ্যালু দ্বারা পাস (Pass by Value)
এই পদ্ধতিতে ফাংশনের স্কোপের ভিতরে অবজেক্টের একটি শ্যালো লোকাল কপি তৈরি হয়। এখানে যা কোনো পরিবর্তন করা হয়, সেটি মূল অবজেক্টে প্রতিফলিত হয় না। উদাহরণস্বরূপ:
ঘোষণা (Declaration)
void fun(X x);
কলিং (Calling)
X x; fun(x);
রেফারেন্স দ্বারা পাস (Pass by Reference)
এই পদ্ধতিতে অবজেক্টের রেফারেন্স ফাংশনে পাস করা হয়। এখানে করা যেকোনো পরিবর্তন মূল অবজেক্টে প্রতিফলিত হয়। কোনো কপি তৈরি হয় না। উদাহরণস্বরূপ:
ঘোষণা
void fun(X &x);
কলিং
X x; fun(x);
কনস্ট রেফারেন্স দ্বারা পাস (Pass by const Reference)
এই পদ্ধতিতে অবজেক্টের একটি কনস্ট রেফারেন্স ফাংশনে পাস করা হয়। এখানে সরাসরি অবজেক্টটি মডিফাই বা রি-অ্যাসাইন করা যায় না (যদিও তার মেথডগুলো ব্যবহার করা যায়)। এটি তখন কাজে আসে যখন ফাংশনটি কেবল রিড-অনلی কপি এক্সেস করবে। কোনো কপি তৈরি হয় না। উদাহরণস্বরূপ:
ঘোষণা
void fun(const X &x);
কলিং
X x; fun(x);
পয়েন্টার দ্বারা পাস (Pass by Pointer)
এই পদ্ধতিতে অবজেক্টের পয়েন্টার ফাংশনে পাস করা হয়। এটি রেফারেন্স দ্বারা পাস করার মতোই। কোনো কপি তৈরি হয় না। উদাহরণস্বরূপ:
ঘোষণা
void fun(X *x);
কলিং
X x; fun(&x);
কনস্ট পয়েন্টার দ্বারা পাস (Pass by const Pointer)
এই পদ্ধতিতে একটি কনস্ট পয়েন্টার ফাংশনে পাস করা হয়। এখানে পয়েন্টারটি মডিফাই বা রি-অ্যাসাইন করা যায় না। এটি তখন ব্যবহারী হয় যখন ফাংশনটি কেবল অবজেক্টের অ্যাড্রেস এক্সেস করবে। কোনো অবজেক্ট কপি তৈরি হয় না। উদাহরণস্বরূপ:
ঘোষণা
void fun(const X *x);
কলিং
X x; fun(&x);