# Langage C++/Méthodes
## Les Méthodes :

La méthode en C++ est l'un des éléments les plus basiques mais essentiels du langage. De nos jours, certains programmes informatiques tels les systèmes d'exploitation contiennent plusieurs millions de méthodes. Comme nous l'avons dit précédemment, la méthode permet de définir une suite d'opérations à exécuter dans un ordre séquentiel donné.
Où <TypeRetour> est le type de retour de la méthode <NomMethode>, <Portee> est le nom de la portée à laquelle est rattachée la méthode, s'il y a lieu, <TypeParametre> est le type du paramètre, <NomParametre> est le nom du paramètre, <ValeurParDefaut> est la valeur éventuellement souhaitée pour le paramètre, <...> sont des paramètres additionnels et <Instructions> sont les instructions contenues dans la méthode.
En C++ l’application la plus basique en C++ est le point d'entrée programme qui n'est autre que la méthode "main".
Ceci est le minimum de code requis pour la création d'une application en C++.
Décortiquons un peu cela :
Nous avons donc ici le point d'entrée du programme. C'est une méthode qui a comme type de retour une valeur entière. Cette valeur permet au système de savoir dans quelle circonstance s'est terminé le programme. Si le programme s'est fermé normalement, la valeur de retour sera égale à zéro. Par contre si une erreur s'est produite, alors la valeur de retour sera différente de zéro. En général, en cas d'erreur, main retourne -1, mais il peut y avoir d'autres valeurs retournées dans certains cas particuliers.
Le paramètre argc est en fait un compteur sur le nombre de chaines de caractères contenus dans le tableau argv.

### Premières applications :

Ici nous allons développer ce que nous avons appris de manière théorique dans les chapitres précédents.
Voici un programme d'exemple qui affiche à l'écran une lettre choisie par le programmeur.
Autre exemple :
Les 2 applications produisent le même résultat mais n'ont pas le même code. Cela confirme le fait que la représentation graphique des caractères se fait par le biais de la représentation non signée du codage du caractère.

#### Bonjour Monde !

Voici l'une des applications les plus basiques que l’on peut faire en C++. Le célèbre "Bonjour Monde !" qui n'a d'autres but que d'afficher "Bonjour Monde !" à l'écran.
Ce programme est statique c'est-à-dire qu’il fera toujours la même chose si on veut qu’il fasse autre chose il faut le reprogrammer. Ce genre de programme n’est pas toujours des plus utiles.

#### Bonjour M. X !

L'étape suivante, pour comprendre l'utilité des paramètres des méthodes (et surtout ceux de la méthode main), est d’utiliser le programme suivant.
Remplacez [PATH] par le chemin absolu de l'exécutable.
Voyons ce qui se passe si on exécute la commande DOS: "[PATH]\BonjourMX.exe X". Le programme affiche "Bonjour M. X !".
Si nous exécutons "[PATH]\BonjourMX.exe Dupont", le programme affiche "Bonjour M. Dupont !".
Si nous exécutons "[PATH]\BonjourMX.exe Dupont Dupond" le programme affiche "Bonjour M. Dupond !".
Maintenant que se passerait-il si nous exécutions "[PATH]\BonjourMX.exe" ?
En fait, le programme est prévu pour afficher le dernier paramètre de la chaîne d'appel de la ligne de commande. Comme le système d'exploitation passe au programme le chemin de ce dernier comme premier paramètre, la commande "[PATH]\BonjourMX.exe" affichera "Bonjour M. [PATH]\BonjourMX.exe !".
Voici donc comment récupérer le nom de l’application ainsi que le chemin à partir duquel elle est lancée. La valeur de "argv[0]" correspond toujours au chemin du programme.

### Appels de Méthodes :

L'appel de méthodes permet l’utilisation et la réutilisation d'un morceau de code par l’ensemble du programme.
Voici une petite application qui permet de se familiariser avec l'utilité des méthodes. Imaginons que nous voulons rendre le calclul : y = a . x + b, accessible à tout le programme sans avoir à le réécrire partout dans le code. Nous devrons alors écrire la méthode "CalculeAffine" suivante :
Ce code n'est pas trop mal, il fonctionne bien. Seulement, il a un problème, il comporte des doublons de code.
* Un vrai développeur n'aurait jamais fait ce programme ainsi. Le copier/coller du code tel que je vous l'ai présenté est consommateur en lignes de code. De plus, il ne facilite pas la lecture du code et peut même introduire des erreurs. Il n'est jamais conseillé de copier/coller du code. Dans un cas sur deux, cela génère des erreurs.
Voyons comment on pourrait arranger cela de manière plus lisible et moins gourmande en code :
On a ainsi réussi à économiser des répétitions de code en factorisant les doublons dans des méthodes

### Récursivité :

La récursivité est la capacité qu'a un algorithme à s'appeler lui-même.

#### Récursivité Directe :

La récursivité directe est la capacité qu'a un algorithme inclus dans une méthode à s'appeler lui-même au travers de la méthode qui le contient.

#### Récursivité Indirecte :

La récursivité indirecte est la capacité qu'a un algorithme inclus dans une méthode à s'appeler lui-même au travers d'une autre méthode que celle qui le contient.
Il est à noter que la récursivité a un poids important sur la gestion de la pile. En effet, à chaque appel d'une méthode le programme change de contexte, ce qui l'oblige à sauvegarder les registres du processeur en pile. Comme la récursivité appelle plusieurs fois la même méthode, la pile est remplie à vitesse grand V, ce qui peut poser problème dans les systèmes ne disposent pas de grosses taille de pile.

#### Alternative à la Récursivité :

En C++, il est toujours possible d'écrire un algorithme qui effectue les tache de la récursion de manière itérative.
Pour la factorielle :
Pour le pair/impair :
La récursivité est préférable, dans la grande majorité des cas, à l'itération car elle permet, en général, une meilleure compréhension d'un algorithme. Cependant, il ne faut pas oublier qu'elle est consommatrice en pile et que cela peut poser problème dans certains systèmes ou pour certaines applications. Heureusement, la récursivité n'est applicable que dans un certain nombre limité de cas.

### Polymorphisme de Méthode

Le polymorphisme de méthode est la faculté qu'ont les méthodes de même nom mais de signatures différentes à pouvoir sélectionner la bonne méthode pour la bonne signature.
| Boucles & Structures Conditionnelles | Pointeur, Tableaux et références |