সি ++ এর পদ্ধতিতে কীভাবে optionচ্ছিক আর্গুমেন্টগুলি পাস করবেন? কোনও কোড স্নিপেট ...
সি ++ এর পদ্ধতিতে কীভাবে optionচ্ছিক আর্গুমেন্টগুলি পাস করবেন? কোনও কোড স্নিপেট ...
উত্তর:
Modeচ্ছিক প্যারামিটার হিসাবে মোড পাস করার উদাহরণ এখানে
void myfunc(int blah, int mode = 0)
{
if (mode == 0)
do_something();
else
do_something_else();
}
আপনি উভয় উপায়ে myfunc কল করতে পারেন এবং উভয়ই বৈধ
myfunc(10); // Mode will be set to default 0
myfunc(10, 1); // Mode will be set to 1
NULLএটি শাব্দিক হিসাবে সংজ্ঞায়িত করা হলেও একটি নাল পয়েন্টার অর্থ 0। ধ্রুব শূন্যের জন্য এটি সর্বজনীন নাম নয়। পূর্ণসংখ্যার (অ-পয়েন্টার) জন্য আপনি সংখ্যা ব্যবহার করা উচিত: int mode = 0।
ডিফল্ট প্যারামিটার ব্যবহার সম্পর্কিত একটি গুরুত্বপূর্ণ নিয়ম:
ডিফল্ট প্যারামিটারগুলি বেশিরভাগ প্রান্তে নির্দিষ্ট করা উচিত, একবার আপনি যখন কোনও ডিফল্ট মান প্যারামিটার নির্দিষ্ট করেন আপনি আবার অ ডিফল্ট প্যারামিটার নির্দিষ্ট করতে পারবেন না। উদা:
int DoSomething(int x, int y = 10, int z) -----------> Not Allowed
int DoSomething(int x, int z, int y = 10) -----------> Allowed
int foo(int x, int y = 10, int z = 10)ফোন করতে এবং ফোন করতে চাই তবে কী হবে foo(1,2), তাই কেবলমাত্র একটি optionচ্ছিক পরামিতি দেওয়া। আমি নিজে এটি কাজ করতে সক্ষম হবে বলে মনে হয় নি।
আপনার কারও কাছে এটি আকর্ষণীয় হতে পারে যে একাধিক ডিফল্ট পরামিতিগুলির ক্ষেত্রে:
void printValues(int x=10, int y=20, int z=30)
{
std::cout << "Values: " << x << " " << y << " " << z << '\n';
}
নিম্নলিখিত ফাংশন কল দেওয়া:
printValues(1, 2, 3);
printValues(1, 2);
printValues(1);
printValues();
নিম্নলিখিত আউটপুট উত্পাদিত হয়:
Values: 1 2 3
Values: 1 2 30
Values: 1 20 30
Values: 10 20 30
তথ্যসূত্র: http://www.learncpp.com/cpp-tutorial/77-default-paraters/
ডিফল্ট পরামিতি ব্যবহার করুন
template <typename T>
void func(T a, T b = T()) {
std::cout << a << b;
}
int main()
{
func(1,4); // a = 1, b = 4
func(1); // a = 1, b = 0
std::string x = "Hello";
std::string y = "World";
func(x,y); // a = "Hello", b ="World"
func(x); // a = "Hello", b = ""
}
দ্রষ্টব্য: নীচেরগুলি অ-গঠিত
template <typename T>
void func(T a = T(), T b )
template <typename T>
void func(T a, T b = a )
এখানে বর্ণিত উদাহরণটি অনুসরণ করতে, তবে শিরোনাম ফাইলগুলির ব্যবহারের সাথে বাক্য গঠনটি পরিষ্কার করতে, ফাংশন ফরোয়ার্ড ঘোষণায় alচ্ছিক প্যারামিটারের ডিফল্ট মান থাকে।
myfile.h
void myfunc(int blah, int mode = 0);
myfile.cpp
void myfunc(int blah, int mode) /* mode = 0 */
{
if (mode == 0)
do_something();
else
do_something_else();
}
কমাগুলি তাদের পৃথক করার সাথে সাথে ডিফল্ট মান ব্যতীত প্যারামিটারগুলির মতো।
int func( int x = 0, int y = 0 );
func(); // doesn't pass optional parameters, defaults are used, x = 0 and y = 0
func(1, 2); // provides optional parameters, x = 1 and y = 2
সি ++ 17 এ স্ট্যান্ড :: :: alচ্ছিক প্রবর্তনের সাথে সাথে আপনি alচ্ছিক আর্গুমেন্টগুলি পাস করতে পারবেন:
#include <iostream>
#include <string>
#include <optional>
void myfunc(const std::string& id, const std::optional<std::string>& param = std::nullopt)
{
std::cout << "id=" << id << ", param=";
if (param)
std::cout << *param << std::endl;
else
std::cout << "<parameter not set>" << std::endl;
}
int main()
{
myfunc("first");
myfunc("second" , "something");
}
আউটপুট:
id=first param=<parameter not set>
id=second param=something