C ++ में एक विधि के लिए वैकल्पिक तर्क कैसे पारित करें? कोई भी कोड स्निपेट ...
C ++ में एक विधि के लिए वैकल्पिक तर्क कैसे पारित करें? कोई भी कोड स्निपेट ...
जवाबों:
यहां वैकल्पिक पैरामीटर के रूप में पासिंग मोड का एक उदाहरण है
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)
केवल एक वैकल्पिक पैरामीटर देना चाहता हूं । मुझे ऐसा नहीं लगता था कि मैं खुद काम कर पाऊं।
यह आप में से कुछ के लिए दिलचस्प हो सकता है कि कई डिफ़ॉल्ट मापदंडों के मामले में:
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-parameters/
डिफ़ॉल्ट मापदंडों का उपयोग करें
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 )
यहां दिए गए उदाहरण का पालन करने के लिए, लेकिन हेडर फ़ाइलों के उपयोग के साथ सिंटैक्स को स्पष्ट करने के लिए, फ़ंक्शन फॉरवर्ड घोषणा में वैकल्पिक पैरामीटर डिफ़ॉल्ट मान होता है।
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 a, int b = -1) {
std::cout << "a = " << a;
if (b != -1)
std::cout << ", b = " << b;
std::cout << "\n";
}
int main() {
func(1, 2); // prints "a=1, b=2\n"
func(3); // prints "a=3\n"
return 0;
}
Std :: C ++ 17 में वैकल्पिक के साथ आप वैकल्पिक तर्क पारित कर सकते हैं:
#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