2010-09-24 27 views
56

¿Cómo pasar argumentos opcionales a un método en C++? Cualquier fragmento de código ...¿Cómo pasar argumentos opcionales a un método en C++?

+1

posible duplicado de [Valor por defecto del parámetro de función] (http://stackoverflow.com/questions/2842928/default-value-of-function-parameter) –

+7

no pasa parámetros de opción. Usted pasa argumentos opcionales! – Chubsdad

+0

Para obtener un control más explícito que el proporcionado al reservar los valores centinela, consulte boost :: optional <>. –

Respuesta

73

Aquí es un ejemplo de modo de pasar como parámetro opcional

void myfunc(int blah, int mode = 0) 
{ 
if(mode == 0) 
    do_something(); 
else 
    do_something_else(); 
} 

puede llamar myfunc en ambos sentidos y tanto son válidos

myfunc(10); //mode will be set to default 0 
myfunc(10, 1);//mode will be set to 1 
+0

¿Puede usted dar algunos ejemplos relacionados con la cadena? –

+0

void myfunc (int blah, modo char [] = NULL) –

+2

'NULL' significa un puntero NULL, aunque se definiría como literal' 0'. No es un nombre universal para el cero constante. Para enteros (no punteros) debe usar números: 'int mode = 0'. – UncleBens

5

Con comas separándolos, 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 
6

lo general mediante el establecimiento de 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; 
} 
10

parámetros de uso por defecto

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 son los malos formada

template <typename T> 
void func(T a = T(), T b) 

template <typename T> 
void func(T a, T b = a) 
19

Una regla importante con respecto a los valores predeterminados uso de parámetros:
parámetros predeterminados deben especificarse como máximo extremo derecho, una vez que se especifique un parámetro de valor predeterminado que no puede especificar el parámetro no predeterminado de nuevo. ejemplo:

int DoSomething(int x, int y = 10, int z) -----------> Not Allowed 

int DoSomething(int x, int z, int y = 10) -----------> Allowed 
+0

¿qué es lo correcto en caso de número variable de argumentos? – Chubsdad

+0

@Chubsdad - Ahh ... ¡mi mala declaración ambigua! ¿la segunda afirmación lo resume correctamente? "una vez que especifica un parámetro de valor predeterminado no puede especificar el parámetro no predeterminado de nuevo" –

+0

Entonces, si entiendo correctamente si tengo múltiples parámetros opcionales, ¿debería implementarlos todos o ninguno? No puedo elegir usar 1 parámetro opcional pero no el resto? – Gerard

8

que puede ser interesante para algunos de ustedes que en caso de múltiples parámetros por defecto:

void printValues(int x=10, int y=20, int z=30) 
{ 
    std::cout << "Values: " << x << " " << y << " " << z << '\n'; 
} 

Dada la función siguiente llama:

printValues(1, 2, 3); 
printValues(1, 2); 
printValues(1); 
printValues(); 

La siguiente salida es producido:

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/

+0

Esto es lo que estaba buscando. Use una función que pueda manejar diferentes números de argumentos. Declare la función con el valor predeterminado en el archivo de encabezado, luego defínelo sin los parámetros predeterminados y luego puede usarlo. No es necesario hacer una función de sobrecarga –

Cuestiones relacionadas