Come passare argomenti opzionali a un metodo in C ++? Qualsiasi frammento di codice ...
Come passare argomenti opzionali a un metodo in C ++? Qualsiasi frammento di codice ...
Risposte:
Di seguito è riportato un esempio di passaggio della modalità come parametro facoltativo
void myfunc(int blah, int mode = 0)
{
if (mode == 0)
do_something();
else
do_something_else();
}
puoi chiamare myfunc in entrambi i modi ed entrambi sono validi
myfunc(10); // Mode will be set to default 0
myfunc(10, 1); // Mode will be set to 1
NULL
indica un puntatore NULL, anche se sarebbe definito come letterale 0
. Non è un nome universale per lo zero costante. Per gli interi (non puntatori) si consiglia di utilizzare i numeri: int mode = 0
.
Una regola importante per quanto riguarda l'utilizzo dei parametri predefiniti: i
parametri predefiniti devono essere specificati all'estremità più a destra, una volta specificato un parametro del valore predefinito non è possibile specificare nuovamente un parametro non predefinito. ex:
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)
e volessi chiamare foo(1,2)
, quindi dando solo un parametro opzionale. Non sembravo essere in grado di farlo funzionare da solo.
Potrebbe essere interessante per alcuni di voi che in caso di più parametri predefiniti:
void printValues(int x=10, int y=20, int z=30)
{
std::cout << "Values: " << x << " " << y << " " << z << '\n';
}
Date le seguenti chiamate di funzione:
printValues(1, 2, 3);
printValues(1, 2);
printValues(1);
printValues();
Viene prodotto il seguente output:
Values: 1 2 3
Values: 1 2 30
Values: 1 20 30
Values: 10 20 30
Riferimento: http://www.learncpp.com/cpp-tutorial/77-default-parameters/
Usa parametri predefiniti
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 = ""
}
Nota: i seguenti sono mal formati
template <typename T>
void func(T a = T(), T b )
template <typename T>
void func(T a, T b = a )
Per seguire l'esempio fornito qui, ma per chiarire la sintassi con l'uso di file di intestazione, la dichiarazione in avanti della funzione contiene il valore predefinito del parametro opzionale.
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();
}
In genere impostando un valore predefinito per un parametro:
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;
}
Con l'introduzione di std :: optional in C ++ 17 puoi passare argomenti opzionali:
#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");
}
Produzione:
id=first param=<parameter not set>
id=second param=something