162 votes

Comment passer des arguments optionnels à une méthode en C ++?

Comment passer des arguments optionnels à une méthode en C ++? Tout extrait de code ...

198voto

JapanPro Points 6278

Voici un exemple de passage du mode en tant que paramètre optionnel

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

vous pouvez appeler myfunc dans les deux sens et les deux sont valides

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

71voto

Alok Save Points 115848

Une règle importante concernant l'utilisation des paramètres par défaut: Les paramètres par défaut doivent être spécifiés à l'extrémité la plus à droite, une fois que vous avez spécifié un paramètre de valeur par défaut, vous ne pouvez plus spécifier de paramètre autre que par défaut. ex:

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

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

43voto

user2008151314 Points 612

Il pourrait être intéressant pour certains d'entre vous qu'en cas de plusieurs paramètres par défaut:

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

Étant donné les appels de fonction suivants:

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

La sortie suivante est produite:

 Values: 1 2 3
Values: 1 2 30
Values: 1 20 30
Values: 10 20 30

Référence: http://www.learncpp.com/cpp-tutorial/77-default-parameters/

43voto

KenJ Points 311

Pour suivre l'exemple donné ici, mais pour clarifier la syntaxe avec l'utilisation de fichiers d'en-tête, la déclaration de transfert de fonction contient la valeur par défaut du paramètre facultatif.

monfichier.h

 void myfunc(int blah, int mode = 0);

monfichier.cpp

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

17voto

Prasoon Saurav Points 47488

Utiliser les paramètres par défaut

 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 = "" 

}

Remarque: les éléments suivants sont mal formés

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X