c++ - una - tipos de funciones en c
¿Cómo pasar argumentos opcionales a un método en C++? (6)
Aquí hay un ejemplo de pasar el modo como parámetro opcional
void myfunc(int blah, int mode = 0)
{
if (mode == 0)
do_something();
else
do_something_else();
}
puede llamar a myfunc en ambos sentidos y ambos son válidos
myfunc(10); // Mode will be set to default 0
myfunc(10, 1); // Mode will be set to 1
¿Cómo pasar argumentos opcionales a un método en C ++? Cualquier fragmento de código ...
Con comas que los separan, al igual que los parámetros sin valores predeterminados.
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
Normalmente, al establecer un valor predeterminado para un parámetro:
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;
}
Puede ser interesante para algunos de ustedes que en el caso de múltiples parámetros predeterminados:
void printValues(int x=10, int y=20, int z=30)
{
std::cout << "Values: " << x << " " << y << " " << z << ''/n'';
}
Dadas las siguientes llamadas a funciones:
printValues(1, 2, 3);
printValues(1, 2);
printValues(1);
printValues();
Se produce el siguiente resultado:
Values: 1 2 3
Values: 1 2 30
Values: 1 20 30
Values: 10 20 30
Referencia: http://www.learncpp.com/cpp-tutorial/77-default-parameters/
Una regla importante con respecto al uso de parámetros predeterminado:
Los parámetros predeterminados se deben especificar en el extremo derecho, una vez que se especifica un parámetro de valor predeterminado no se puede volver a especificar el parámetro no predeterminado. ex:
int DoSomething(int x, int y = 10, int z) -----------> Not Allowed
int DoSomething(int x, int z, int y = 10) -----------> Allowed
Use los parámetros predeterminados
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: Los siguientes están mal formados
template <typename T>
void func(T a = T(), T b )
template <typename T>
void func(T a, T b = a )