Du C au C++ Les commentaires .... /* voici un long commentaire en C Et qui s’ét

Du C au C++ Les commentaires .... /* voici un long commentaire en C Et qui s’étend sur plusieurs lignes */ .... .... // un commentaire en C++ sur une ligne .... // n'appartient qu'au C++ Types de données • C++ introduit le type bool et dont les valeurs possibles sont true et false. bool porteOuverte = true; Bool partieFinie = false; Le type bool • En C++, comme en langage C, le programmeur peut définir de nouveaux Définition implicite des types • En C++, comme en langage C, le programmeur peut définir de nouveaux types en définissant des struct , enum ou union. • Mais contrairement au langage C, l’utilisation de typedef n’est plus obligatoire pour renommer un type. Les types suivants peuvent être définis sans avoir à utiliser typedef : • Les énumérations : enum values {1,2,3,4}; enum couleur { rouge=1, noir = 3, blanc =7}; • Les structures • Les unions Types de données (2) struct FICHE{ // définition du type FICHE char *nom, *prenom; int age; } // en C, il faut ajouter la ligne : // typedef struct FICHE FICHE; FICHE adherent, *liste; FICHE adherent, *liste; enum BOOLEEN {FAUX, VRAI}; // en C, il faut ajouter la ligne : // typedef enum BOOLEEN BOOLEEN; BOOLEEN trouve; trouve = FAUX; // trouve = 0; permise en C mais pas en C++ car il y a une // vérification stricte des types trouve = (BOOLEEN) 0; // OK Déclaration des variables et des fonctions C C++ •En C++, il est possible de déclarer les variables et les fonctions n’importe où dans le code. •La portée de ces variables va de l’endroit de la déclaration jusqu’à la fin du bloc courant. C C++ int i=5, itmp; int j=2; ... for (itmp=0; itmp<10; itmp++){ j+=itmp; } int i=5; ... int j=2; for (int i=0; i<10; i++){ j+=i;// désigne le i local } // i vaut 5 ! // j vaut 47 ! //i est juste une variable de parcours temporaire Déclaration des variables et des fonctions (2) C C++ // déclaration d’une fonction int somme(int n1, int n2){ return n1+n2 } int main() { #include <stdio.h> int main() { int i=0; i++; int j=1; j++; int main() { int i=0; i++; int j=1; j++; printf("%d+%d=%d",i,j, somme(i,j)); } j++; // déclaration d’une fonction int somme(int n1, int n2); printf("%d+%d=%d",i,j, somme(i,j)); } int somme(int n1, int n2){ return n1+n2 } //une des possibilités Résolution de la portée des variables L’opérateur de résolution de portée :: permet d’accéder aux variables globales. #include <iostream.h> int i = 11; void main(){ int i = 57; { int i = 23; ::i = ::i + 1; cout << ::i << " " << i << endl; } cout << ::i << " " << i << endl; } Résultat de l’exécution 12 23 12 57 L’utilisation abusive de cette technique n’est pas une bonne pratique. Les constantes • Le mot réservé const permet de définir une constante. • L’élément ainsi spécifié ne pourra pas être modifié durant toute sa durée de vie. • Il est indispensable d’initialiser la constante au moment de sa définition. Exemple : const int N = 10; // N est un entier constant. const int MOIS=9, NBETUDIANTS=17; // 2 constantes const int MOIS=9, NBETUDIANTS=17; // 2 constantes int tab[2 * N]; // autorisée en C++ (interdite en C) Les constantes (2) • Le mot-clé const remplace la directive du préprocesseur #define • const permet de définir des constantes typées et même des pointeurs constants. C++ C • const double PI=3.14; • const char NOM[]=" Salah"; • const int MAX=100; • #define PI 3.14 • #define NOM "Salah" • #define MAX 100 Exemple : char c; const char NOM[] = “Salah”; const char *p='t'; /*pointeur sur un caractère constant*/ char * const q=&c; /*pointeur constant sur un caractère*/ const char * const q = NOM; /* pointeur constant sur un caractère constant */ • const int MAX=100; • #define MAX 100 Les références (alias) • C++ permet de définir des variables références que l'on peut identifier à d’autres variables. • Une variable référence est un alias servant à manipuler une autre variable. Exemple int n,m ; int n,m ; int & i=n ; // i variable référence sur n i=m; // Signifie n=m ou n prend la valeur de m et // non pas i devient une référence sur m ! Les références (2) Le passage par référence • C ne permet de réaliser que des passages d’arguments par valeur. • Si un sous programme a besoin de modifier la valeur de l'un de ses paramètres de manière visible à l’extérieur, il faut passer un pointeur sur le paramètre à modifier. • C++ palie à cette lacune en introduisant le passage de paramètres par • C++ palie à cette lacune en introduisant le passage de paramètres par référence. C C++ void f(int * a, int * b){ int tmp=*a; *a=*b; *b=tmp; } .... int i=2, j=4; f(&i, &j); /* i vaut 4 et j vaut 2 */ void f(int & a, int & b){ int tmp=a; a=b; b=tmp; } .... int i=2, j=4; f(i, j); // i vaut 4 et j vaut 2 Allocation de la mémoire • C++ propose de nouvelles possibilités pour la gestion de la mémoire. – Le mot clé new permet d’allouer l’espace mémoire du type indiqué – Le mot clé delete permet de libérer l’espace déjà alloué. • Utilisation de malloc et de free #include <malloc.h> type*ptr; En C type*ptr; /*réservation d’un espace mémoire pour les valeurs*/ ptr=(type*)malloc(sizeof(type)*NbrDeValeurs); /* libération */ free(ptr); • Utilisation de new et de delete Type *ptr; /*réservation d’un espace mémoire pour les valeurs*/ ptr=new type; ptr= new type[NbrDeValeurs]; /* libération */ delete ptr; delete[] ptr; En C++ Typage et prototypage obligatoire des fonctions • La déclaration des arguments se fait toujours à l’intérieur des parenthèses. • Le typage des fonctions est obligatoires, et possède un sens fort : – On ne peut pas retourner une valeur si la fonction a été déclarée void – On doit retourner une valeur si un autre type de retour est déclaré. Exemples : Exemples : void f(int, char*) ; void f(int i, char* c) ; int f(int i) { …return ‘une valeur entière’ }; f(); // f ne peut pas être appelée avec des arguments. Les paramètres avec valeur par défaut • C++ permet de spécifier une valeur par défaut aux paramètres. • Il existe cependant une restriction importante dans la mise en œuvre des paramètres par défaut: À partir du moment où un paramètre possède une valeur par défaut, tous les paramètres suivants doivent également en posséder une. • Le respect de cette règle est obligatoire pour éviter les ambigüités • Le respect de cette règle est obligatoire pour éviter les ambigüités Exemple : Utilisation correcte Utilisation non conforme Int f(int x, int y=0, int z=0); .... f(a); // OK ~ f(a,0,0) f(a,b); // OK ~ f(a,b,0) f(a,b,c); // OK ~ f(a,b,c) int f(int a=0, int b, int c=0); .... i=f(1,2,3);//OK j=f(4);//OK ~ f(0,4,0) k=f(5,6);//f(5,6,0) ou f(0,5,6)? Les fonctions inline • En C, lorsqu'on souhaite factoriser un morceau de code sans pour autant créer une fonction, on a la possibilité de définir une macro. #define MAX(a,b) (((a)>=(b))? (a) : (b)) – Les macros peuvent entrainer des effets de bords désastreux lorsqu'elles sont – Les macros peuvent entrainer des effets de bords désastreux lorsqu'elles sont mal définies. – Il n'y a aucun contrôle sur le type des arguments. • En C++, le mot clé inline permet d'éviter le recours aux macros. Le compilateur se charge de convertir la fonction déclarée comme inline en macro. – Sécurité : contrôle des types, pas d’effets de bords – Rapidité : la fonction inline est traduite en macro et est donc rapide inline int Max (int a, int b) {return (a>=b) ? a : b);} Inclusion des bibliothèques • La manière classique d'inclure les fichiers d'en-tête des bibliothèques du C était la suivante : #include <stdio.h> #include <math.h> • En C++, il n'est plus nécessaire de spécifier l'extension des fichiers d'en-tête • En C++, il n'est plus nécessaire de spécifier l'extension des fichiers d'en-tête standards du C, mais il faut spécifier que c'est un fichier de la librairie C en ajoutant le caractère 'c’ devant #include <cstdio> #include <cmath> • Lorsqu’il s’agit d’une bibliothèque C++, pas besoin d’extensions #include <iostream> Les espaces de nommage • En C, il était difficile de faire cohabiter plusieurs versions d'une même structure de données. Donc, Pour éviter les conflits des noms, il fallait modifier les noms de chaque structure. • C++ propose un moyen simple pour résoudre ce problème : les espaces de nommage. • Les espaces de nommage permettent de définir une unité cohérente dans laquelle il est possible de regrouper les déclarations de différents éléments (types, est possible de regrouper les déclarations de différents éléments (types, constantes, variables, fonctions). • Les identificateurs présents dans l'espace de nommage possèdent alors une portée qui leur est spécifique. Exemple : espaces de nommage Définition/utilisation du uploads/S4/ ch2-migration.pdf

  • 27
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager
  • Détails
  • Publié le Dec 13, 2022
  • Catégorie Law / Droit
  • Langue French
  • Taille du fichier 0.1793MB