আমাদের এখনকার জ্ঞান দিয়ে একটি ফাংশনের সাহায্যে একটি ভ্যারিয়েবল আপডেট করা কিছুটা ঝামেলার কাজ। প্রতিটি ফাংশন আর্গুমেন্ট কপি হিসেবে গণ্য হয় এবং মূল মানটি বদলায় না। আপনার টাইপের আকারের উপর নির্ভর করে এটি আপনার কোডের পারফরম্যান্সে গুরুতর প্রভাব ফেলতে পারে।
int adjust_salary(int base, int kids) {
return base + kids * 500;
}
int now_a_mother_of_twins{2500};
adjust_salary(now_a_mother_of_twins, 2);
// now_a_mother_of_twins is still 2500
now_a_mother_of_twins = adjust_salary(now_a_mother_of_twins, 2);
// now_a_mother_of_twins is now 3500
References-কে অ্যালিয়াস হিসেবে দেখা যেতে পারে, এদের পরিবর্তন মূল ভ্যারিয়েবলে প্রভাব ফেলে। টাইপ ডিক্লারেশনে References একটি অ্যাম্পারস্যান্ড (&) ব্যবহার করে।
int balance{1000};
int& budget{balance};
int pro_computer_wheels{699};
budget -= pro_computer_wheels;
// budget is now 301;
// balance is also 301;
রিসিটিং (অর্থাৎ একটি reference-এর বাইন্ডিং বদলানো) সম্ভব নয়। আপনি একটি আনইনিশিয়ালাইজড reference রাখতে পারেন না। References-কে একটি বিদ্যমান ভ্যারিয়েবল দিয়ে ইনিশিয়ালাইজ করতে হয়।
int main_acc{1'000'000};
int side_acc{-20};
int& savings{main_acc};
// => main_acc and savings are 1'000'000
// try to reseat savings to use main account
savings = side_acc;
// savings and main_acc are now -20
// as this uses the **value** of side_acc
savings += 20;
// savings and main_acc are now 0, side_acc is still -20
int& future_budget;
// => compiler error, reference must be bound!
voidreferences-এর শক্তি কাজে লাগিয়ে আপনার হয়তো ফাংশন থেকে কোনো মান রিটার্ন করার দরকারই নাও পড়তে পারে। এমন ক্ষেত্রে void-কে রিটার্ন টাইপ হিসেবে ব্যবহার করা হয়।
void increase_power(int& level) {
level += 500;
}
int goku{8700};
increase_power(goku);
// goku's power level?
// It's over 9000!
আপনার কাছের একটি স্থানীয় স্কুলে শিক্ষার্থীদের একটি অত্যন্ত সক্রিয় সমিতি আছে। শিক্ষার্থীদের এই সমিতিটি পরিচালিত হয় একজন প্রেসিডেন্টের নেতৃত্বে, আর প্রতি দুই বছর পরপর নতুন প্রেসিডেন্ট নির্বাচনের জন্য নির্বাচন অনুষ্ঠিত হয়।
এ বছরের নির্বাচনে ঠিক করা হয় যে ভোট গণনার জন্য একটি নতুন ডিজিটাল সিস্টেম প্রয়োজন। এই নতুন সিস্টেমটি তৈরি করতে স্কুলের আপনার সাহায্য দরকার।
ElectionResult থেকে ভোটের সংখ্যা বের করুননতুন সিস্টেমের জন্য একটি কাউন্টার থেকে ভোটের সংখ্যা পাওয়ার একটি উপায় থাকতে হবে।
নির্বাচনের ফলাফলের struct-টি আপনার জন্য আগেই তৈরি করা হয়েছে এবং এটি এভাবে ডিফাইন করা:
struct ElectionResult {
// Name of the candidate
std::string name{};
// Number of votes the candidate has
int votes{};
};
struct-এর সব সদস্য public হওয়ায় একটি ElectionResult অবজেক্ট ইনিশিয়ালাইজ করতে আপনাকে একটি constructor লিখতে হবে না। এর বদলে আপনি একটি initializer list ব্যবহার করতে পারেন:
ElectionResult hamilton{"Alex", 1804};
// => the hamilton object was initialized with the name "Alex" and 1804 votes.
এমন একটি ফাংশন vote_count তৈরি করুন, যা আর্গুমেন্ট হিসেবে একটি ElectionResult-এর রেফারেন্স নেবে এবং ElectionResult-টির ভোটের সংখ্যা রিটার্ন করবে।
vote_count(hamilton);
// => 1804
ElectionResult-এর ভোট বাড়ানঅবশেষে ভোট প্রক্রিয়া করার সময় এসেছে! এখন আপনার একটি ElectionResult-এর ভোট বাড়ানোর একটি উপায় দরকার।
এমন একটি void ফাংশন increment_vote_count তৈরি করুন, যা আর্গুমেন্ট হিসেবে একটি ElectionResult-এর রেফারেন্স এবং একটি ভোট-সংখ্যা নেবে, এবং সেই সংখ্যক ভোট দিয়ে ElectionResult-টি বাড়িয়ে দেবে।
ElectionResult burr{"Aaron " 1801};
increment_vote_count(burr, 3);
vote_count(burr);
// => 1804
স্কুল তাদের ভোট জমা দিয়েছে, আর এখন বিজয়ী কে তা নির্ধারণের জন্য ফলাফল যাচাই করার সময়।
এমন একটি ফাংশন determine_result তৈরি করুন, যা চূড়ান্ত গণনার একটি রেফারেন্স গ্রহণ করে এবং নতুন প্রেসিডেন্টের ElectionResult-এর একটি রেফারেন্স রিটার্ন করে। এছাড়া এটি বিজয়ীর নামের আগে "President" প্রিফিক্স বসিয়ে নামটি পরিবর্তন করবে। চূড়ান্ত গণনাটি দেওয়া হয় std::vector<ElectionResult>-এর একটি reference আকারে, অর্থাৎ অংশগ্রহণকারী সব প্রার্থীর ElectionResults সম্বলিত একটি ভেক্টর।
ElectionResult sanchez{"Pedro", 471};
ElectionResult wheatley{"Summer", 340};
std::vector<ElectionResult> final_count{sanchez, wheatley};
ElectionResult& winner = determine_result(final_count);
winner.name;
// => "President Pedro"
সহজ রাখতে আপনি নিচের বিষয়গুলো ধরে নিতে পারেন:
vector-টিতে অন্তত একটি এলিমেন্ট থাকবে।Exercism-এ সাইন আপ করুন, C++ ট্র্যাকের 19টি কনসেপ্ট100টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।