Les fonctions
En Java, toutes les méthodes sont liées à une classe. En C++ (de même qu’en C), les méthodes peuvent exister indépendamment de toute classe. Notez qu’en C nous parlerons plutôt de fonctions ou de procédures1 à la place de méthodes; les méthodes sont liées aux classes de C++.
int Max(int x, int y) {
return x > y ? y : x;
}
En Java les arguments de types simples (int
, float
, …) sont toujours passés par valeur (copie)
et les arguments de type string
, les tableaux et les objets sont toujours passés par référence.
En C++ les tableaux sont passés par référence, mais pour les autres types on a le choix.
Par défaut, les arguments sont passés par valeur, mais on peut les passer par référence si
on ajoute un &
à la fin du type. Par exemple :
void Swap(int& a, int& b) {
int temp = a;
a = b;
b = temp;
}
Lorsque nous appelons Swap(x,y)
, nous passons des références vers x
et y
et la
procédure Swap
peut modifier les valeurs de x
et de y
. Notez que si vous
appelez avec des constantes (Swap(1,2)
), la compilation ne sera pas possible
et le compilateur indiquera une erreur.
On peut aussi choisir de passer des arguments par référence pour des questions de
performance sans forcément vouloir laisser la fonction modifier le contenu de l’argument.
On peut le faire en C++ en ajoutant le préfixe const
:
void Find(const BigObject& o, int x) {
...
}
Tout comme Java, le C++ permet de surcharger des fonctions du moment que les arguments sont de types différents :
int Max(int a, int b) {
return a > b ? a : b;
}
float Max(float a, float b) {
return a > b ? a : b;
}
La surcharge de fonction n’est pas possible en C.
Une autre caractéristique de C++ qui n’est pas possible en C ou en Java est et de permettre des valeurs par défaut pour les arguments :
void Sort(Array& array, bool descending=false) {
...
}
On peut appeler cette méthode avec un ou deux arguments :
Sort(myArray); // descending = false (default)
Sort(myArray, false); // OK, but redundant
Sort(myArray, true); // descending = true
Cette construction permet bien souvent de s’épargner la surcharge de fonction et elle simplifie aussi le code.
-
La différence entre une fonction et une procédure c’est qu’une fonction retourne une valeur alors qu’une procédure ne retourne rien (
void
). ↩