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.