L'affectation est une instruction qui permet de modifier la valeur d'une variable. Plus précisement:
Affecter une valeur à une variable modifie donc l'état de la plage mémoire qui lui est allouée, ou autrement dit son "contenu".
Reprenons notre exemple avec les quatre variables Age, NombreEnfant, Nom et Prenom. Supposons qu'à un instant donné l'état de la mémoire soit le suivant:
Si on affecte ensuite la valeur 33 à la variable Age, on obtient :
et la plage mémoire allouée à la variable Age restera inchangée jusqu'à ce qu'une valeur différente lui soit affectée.
En C++, on représente l'affectation par l'opérateur =. Le nom de la variable figure à gauche du = et la valeur qu'on veut lui affecter, à droite
Par exemple, affecter la valeur 33 à la variable Age s'écrira :
Age = 33 ;
De manière générale, ce qui figure à droite du = est une expression. Une affectation s'écrit donc sous la forme:
Nom de variable = expression ;
Une affectation est toujours exécutée de droite à gauche. C'est à dire que l'expression figurant à droite du signe = est d'abord évaluée et que sa valeur est ensuite enregistrée dans la variable dont le nom figure à gauche du =.
Notez également que la présence du point-virgule à la fin de l'affectation est obligatoire.
Voilà un premier exemple de code C++, principalement composé d'affectations
int Age, MonAge ; Age = 20 ; MonAge = 47 ; Age = Age+1 ; Age = Age*2 ; MonAge = Age ;
Ce code commence par la déclaration de deux variables de type entier (Age et MonAge). Après la partie déclaration, on a cinq instructions d'affectation.
Voilà comment se déroule ensuite l'exécution des affectations:
Après l'exécution de l'instruction | Age vaut | MonAge vaut |
Age = 20 ; | 20 | ? |
MonAge = 47 ; | 20 | 47 |
Age = Age + 1 ; | 21 | 47 |
Age = 2 * Age ; | 42 | 47 |
MonAge = Age ; | 42 | 42 |
Pour pouvoir affecter une expression à une variable, il faut que la variable soit de même type que l'expression. On ne pourra donc pas affecter une expression de type chaine de caractères à un int ou à un float (cela génère une erreur de compilation).
Il existe toutefois des exceptions pour les types numériques. Par exemple, si une variable est de type float, il est possible de lui affecter une expression de type int. Dans ce cas, la valeur de l'expression sera automatiquement codée en un float avant d'être affectée à la variable.
L'affectation d'une expression de type float à une variable de type int sera également acceptée par le compilateur, mais elle entraine une perte d'information.
Prenons par exemple l'affectation suivante:
x = 52.67;
où x est une variable de type int.
Pour affecter cette valeur à x, le compilateur prend la partie entière de 52.67, c'est à dire 52. On a donc une perte de précision.
Dans une affectation, l'expression affectée à la variable peut elle même contenir la variable. On dit alors que l'affectation est récursive.
Ajouter le prix d'un article au prix total, se traduit par l'affectation récursive suivante:
PrixTotal = PrixTotal + Prix ;
Augmenter la valeur d'une variable de 1, se dit incrémenter. C'est un cas particulier d'affectation récursive très fréquement utilisé en programmation.
Par exemple, pour incrémenter le nombre d'articles:
NombreArticle = NombreArticle + 1 ;
De même, diminuer la valeur d'une variable de 1 est une affectation récursive appelé décrémentation.
L'instruction suivante par exemple, décrémente le nombre d'articles:
NombreArticle = NombreArticle - 1 ;
En C++ différents opérateurs permettent de raccourcir l'écriture des affectations récursives.
Opérateur | Exemple | Equivaut à |
++ | Age++; | Age = Age + 1; |
-- | Age--; | Age = Age - 1; |
+= | PrixTotal += Prix; | PrixTotal = PrixTotal + Prix; |
-= | PrixTotal -= 100; | PrixTotal = PrixTotal - 100; |
/= | PrixTotal /= 2; | PrixTotal = PrixTotal / 2; |
*= | PrixTotal *= 2; | PrixTotal = PrixTotal * 2; |
Voilà donc les premiers exemples d'opérateurs unaires que nous rencontrons dans ce cours.