Le langage C++ placement des déclarations de variables

Eléments préalables
Ce document est le support du cours sur le langage C++, considéré comme une extension de C, langage présumé bien connu. Attention, la présentation faite ici est déséquilibrée : des concepts importants ne sont pas expliqués, pour la raison qu’ils sont réalisés en C++ comme en C, donc supposés acquis. En revanche, nous insistons sur les déférences entre C et C++ et notamment sur tous les ´éléments orientés objets que C++ ajoute `a C. Cette première section expose un certain nombre de notions qui, sans ˆêtre directement liés à  la  méthodologie objets, font déjà apparaître C++ comme une amélioration notable de C.
Placement des déclarations de variables
En C les  déclarations de variables doivent apparaître au début d’un bloc. En C++, au contraire, on peut mettre une  déclaration de variable partout où on peut mettre une instruction1. Cette différence paraît mineure, mais elle est importante par son esprit. Elle permet de repousser la  déclaration d’une variable jusqu’`a l’endroit du programme où l’on dispose d’assez ´éléments pour l’initialiser. On lutte aussi contre les variables déjà  déclarées mais non encore initialisées
qui sont un important vivier de bugs dans les programmes. Exemple, l’emploi d’un fichier. Version C : { FILE *fic; … obtention de nomFic, le nom du fichier `a ouvrir Danger! Tout emploi de fic ici est erron´ e … fic = fopen(nom, « w »); … ici, l’emploi de fic est l´egitime … } Version C++ : { … obtention de nomFic, le nom du fichier `a ouvrir ici pas de danger d’utiliser fic `a tort … FILE *fic = fopen(nom, « w »); … ici, l’emploi de fic est légitime … }
Booléens
En plus des types définis par l’utilisateur (ou classes, une des notions fondamentales de la programmation orientée objets) C++ possède quelques types qui manquaient `a C, notamment le type booléen et les types références. Le type bool (pour booléen) comporte deux valeurs : false et true. Contrairement `a C: – le résultat d’une opération logique (&&, ||, etc.) est de type booléen, – l`a où une condition est attendue on doit mettre une expression de type booléen et – il est déconseillé de prendre les entiers pour des booléens et r´eciproquement. Conséquence pratique : n’´écrivez pas if (x) … au lieu de if (x!= 0) …
1Bien entendu, une régle absolue reste en vigueur : une variable ne peut ˆêtre utilisée qu’après qu’elle ait ´été déclarée.
Références
Notion
A côte des pointeurs, les références sont une autre manière de manipuler les adresses des objets placés dans la mémoire. Une référence est un pointeur géré de manière interne par la machine. Si T est un type donné, le type référence sur T se note T&. Exemple : int i; int & r = i; // rest une référence sur i Une valeur de type référence est une adresse mais, hormis lors de son initialisation, toute opération effectuée sur la référence agit sur l’objet référencé, non sur l’adresse. Il en d´ecoule qu’il est obligatoire d’initialiser une r´ eférence lors de sa création; après, c’est trop tard : r = j; // ceci ne transforme pas r en une référence // sur j mais copie la valeur de j dans i
1.3.2 Références paramètres des fonctions
L’utilité principale des références est de permettre de donner aux fonctions des paramètres modifiables, sans utiliser explicitement les pointeurs. Exemple : void permuter(int & a, int & b) { int w = a; a = b; b = w; } Lors d’un appel de cette fonction, comme permuter(t[i], u); ses paramètres formels a et b sont initialisés avec les adresses des paramètres effectifs t[i] et u, mais cette utilisation des adresses reste cachée, le programmeur n’a pas `a s’en occuper. Autrement dit, `a l’occasion d’un tel appel, a et b ne sont pas des variables locales de la fonction recevant des copies des valeurs des paramètres, mais d’authentiques synonymes des variables t[i] et il en résulte que l’appel ci-dessus permute effectivement les valeurs des variables t[i] et u2.
Fonctions renvoyant une référence
Il est possible d’écrire des fonctions qui renvoient une référence comme résultat. Cela leur permet d’être le membre gauche d’une affectation, ce qui donne lieu à des expressions ´élégantes et efficaces. Par exemple, voici comment une fonction permet de simuler un tableau indexé par des chaînes de caract`eres3 : char *noms[N]; int ages[N];
int & âge(char *nom) { for (int i = 0; i < N; i++) if (strcmp(nom, noms[i]) == 0) return ages[i]; } Une telle fonction permet l’écriture d’expressions qui ressemblent `a des acc`es `a un tableau dont les indices seraient des chaînes : âge(« Amélie ») = 20; ou encore âge(« Benjamin »)++;

Cours gratuitTélécharger le cours complet

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *