Programmer en C++
Les classes : Arguments par défaut

Arguments par défaut

Analysons ce programme :

#include <iostream>

using namespace std;

// Déclaration de la classe Point
class Point
{
private:
    int x;
    int y;
public:
    Point(int x = 0, int y = 0);     // Constructeur avec arguments par défaut
    void afficher();
};

int main()
{
    Point a;         // Serait refusé si pas d'arguments par défaut
    a.afficher();
    Point b(2, -4);
    b.afficher();
    return 0;
}

Point::Point(int abscisse, int ordonnee)     // Constructeur
{
    x = abscisse;
    y = ordonnee;
}

void Point::afficher()
{
    cout << "Les coordonnees du point sont (" << x << ", " << y << ")" << endl;
}

Lançons le programme. Nous obtenons :

Les coordonnees du point sont (0, 0)
Les coordonnees du point sont (2, -4)

A la première instance créée, nous ne transmettons aucun argument. Les arguments par défaut sont alors utilisés et les variables membres deviennent x = 0, et y = 0.
A la création de la deuxième instance, les deux arguments sont fournis et ce sont eux qui sont appliqués aux variables membres.
Que se passerait-il si seulement un argument était transmis ?
Dans le constructeur, le premier argument est "x". C'est donc "x" qui prendra la valeur de l'argument transmis. Comme il n'y a pas de deuxième argument, "y" prendra la valeur par défaut. Voilà ce que donnerait cet exemple :

Point c(3);
c.afficher();

et ...

Les coordonnees du point sont (3, 0)

Retenez que les arguments par défaut s'écrivent dans la déclaration, et pas dans la définition, de la fonction.