মডিউল পাঠ (2/2)
মান এবং রেফারেন্স দ্বারা পাস
C++ এ, যখন আপনি একটি ফাংশনে একটি আর্গুমেন্ট পাস করেন, তখন এটি করার দুটি প্রধান উপায় রয়েছে: মান অনুসারে বা রেফারেন্স দ্বারা।
এই পার্থক্য বোঝা প্রোগ্রাম সঠিকতা এবং কর্মক্ষমতা অপ্টিমাইজেশান উভয়েরই চাবিকাঠি।
মূল্য দ্বারা পাস (কপি)
ডিফল্টরূপে, C++ মান অনুসারে আর্গুমেন্ট পাস করে। এর মানে মেমরিতে ডেটার একটি কপি তৈরি করা হয়েছে। ফাংশনের ভিতরে করা কোন পরিবর্তন মূল পরিবর্তনশীলকে বাইরে প্রভাবিত করবে না:
#include <iostream>
void increment(int n) {
n++; // Modifies only the local copy
}
int main() {
int x = 5;
increment(x);
std::cout << x << std::endl; // Prints 5, x remains unchanged!
return 0;
}রেফারেন্স দ্বারা পাস (&)
আপনি যদি ফাংশনটি মূল ভেরিয়েবল পরিবর্তন করতে সক্ষম হতে চান, অথবা আপনি যদি বড় বস্তু (যেমন দীর্ঘ স্ট্রিং বা ভেক্টর) অনুলিপি করা এড়াতে চান তবে আপনাকে অবশ্যই রেফারেন্স দ্বারা পাস ব্যবহার করতে হবে।
প্যারামিটারের প্রকারের পরে & চিহ্ন যোগ করে একটি রেফারেন্স ঘোষণা করা হয়:
#include <iostream>
void incrementRef(int& n) {
n++; // Modifies the original variable directly
}
int main() {
int x = 5;
incrementRef(x);
std::cout << x << std::endl; // Prints 6!
return 0;
}প্যারামিটার int& n একটি অনুলিপি নয়, কিন্তু ফাংশনটি কল করার সময় x ভেরিয়েবলের একটি উনাম (একটি সরাসরি উল্লেখ) পাস হয়েছে৷
নিজে চেষ্টা করে দেখুন
একটি অকার্যকর রিটার্ন টাইপ সহ doubleNumber নামের একটি ফাংশন সংজ্ঞায়িত করুন যা একটি পূর্ণসংখ্যা n এর একটি রেফারেন্স নেয় (int&n ব্যবহার করে) এবং এর মান দ্বিগুণ করে (n = n * 2)। এটিকে প্রধান পাসিং এ কল করুন ভেরিয়েবল ভ্যালটি 10 এ আরম্ভ করা হয়েছে, তারপর ভ্যাল প্রিন্ট করুন।
ইঙ্গিত দেখান
ফাংশন স্বাক্ষর একটি রেফারেন্স নির্দেশ করতে টাইপের পরে `&`অক্ষর ব্যবহার করে:`void doubleNumber(int&n)`।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
সোয়াপ নামের একটি ফাংশন সংজ্ঞায়িত করুন যা দুটি পূর্ণসংখ্যার রেফারেন্স a এবং b (int&a, int&b) নেয় এবং একটি অস্থায়ী পরিবর্তনশীল টেম্প ব্যবহার করে তাদের মানগুলি অদলবদল করে। x এবং y অদলবদল করতে এটিকে প্রধানভাবে কল করুন এবং তারপরে তাদের মুদ্রণ করুন।
ইঙ্গিত দেখান
`int temp = a ব্যবহার করুন; a = b; b = temp;` মান অদলবদল করতে।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ