Conception de Programmes - IUT de Paris - 1ère année - 98-991 Quelques éléments du langage C++ Les références La surcharge de fonctions Les fonctions «

Slides:



Advertisements
Présentations similaires
La programmation orientée objet avec Java L3-MIAGE Plan
Advertisements

Premier programme en C :
La boucle for : init7.c et init71.c
Les fonctions A quoi ça sert ?
Programmation Orienté Objet en C++
3- Déclaration et accès aux objets
C.
Paramètres et pointeurs
Introduction à la programmation (420-PK2-SL) cours 15 Gestion des applications Technologie de linformation (LEA.BW)
CSI3525: Concepts des Langages de Programmation Notes # 11: Sous-Programmes ( Lire Chapitre 8 )
Principes de programmation (suite)
2ième Classe (Mercredi, 13 Octobre) C++ Intro CSI2572.
Points importants de la semaine Les fonctions. La portée. La passage par copie. Les tableaux.
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
Points importants de la semaine Le paramétrage. La portée. Le passage par copie. Le passage par référence.
Leçon 6 : Structures de données dynamiques IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier.
8PRO100 Éléments de programmation Allocation dynamique de la mémoire.
TRAITEMENT DE STRUCTURES
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
Les Classes les structures en C (struct) regroupent des variables : structuration de l'analyse mais problèmes de cohérence problèmes de sécurité d'accès.
Quest-ce quune classe dallocation? Une classe dallocation détermine la portée et la durée de vie dun objet ou dune fonction.
Leçon 2 : Surcharge des opérateurs IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
Les pointeurs Enormément utilisé en C/C++ ! Pourquoi? A quoi ça sert?
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
Structures de données IFT-2000
Structures de données IFT-2000
Sixième cours Les chaînes de caractères et le passage de paramètres par référence Passage de paramètres par référence String.h.
Points importants de la semaine Le préprocesseur. La conversion de types. Les fonctions.
Points importants de la semaine Les constantes de compilation. Les fonctions.
Contrôle de types Les types en programmation Expressions de types Un contrôleur de types Equivalence de types Conversions de types Généricité.
Chapitre 9 Les sous-programmes.
Méthode et Outils pour la Programmation
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
Structures de données IFT-2000
Procédures et fonctions
Plan cours La notion de pointeur et d’adresse mémoire.
2.1 - Historique Chapitre 2 : Introduction au langage C++
Les Pointeurs et les Tableaux Statiques et Tableaux Dynamiques
La notion de type revisitée en POO
Les adresses des fonctions
SIF-1053 Architecture des ordinateurs
1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée.
Tutorat en bio-informatique
Tutorat en bio-informatique Le 14 novembre Au programme… Les objets –Propriétés (attributs) –Constructeurs –Méthodes.
Introduction au langage C Fonctions et Procédures
Les classes et les objets Les données finales class A { … private final int n = 20 ; // la valeur de n est définie dans sa déclaration … } class A { public.
Les opérateurs L’amitié Les opérateurs Introduction
Les surcharges d'opérateurs
Interprétation/Génération de code pour le langage Z minimal Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
8PRO100 Éléments de programmation Les pointeurs de caractères.
Conception de Programmes - IUT de Paris - 1ère année – Cours 8 – Les entrées/sorties Comment fonctionnent les opérateurs > pour les types élémentaires.
Classe 1 CSI2572 Autres modificateurs de déclaration de variables: & volatile & register & static & auto & extern & const volatile Indique au compilateur.
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Conception de Programmes - IUT de Paris - 1ère année – Cours 6 - Les opérateurs L’amitié Les opérateurs –Introduction –Surcharge par fonction.
Conception de Programmes - IUT de Paris - 1ère année Cours 2 – Références et passage de paramètres Les Références –Introduction aux références.
Conception de Programmes - IUT de Paris - 1ère année Conception de Programmes Objectifs et organisation du cours Introduction à la P.O.O.
Les fonctions. Déclaration/Prototypes C’est une instruction fournissant au compilateur des infos sur une fonction qu’on envisage d’appeler par le suite.
8PRO107 Éléments de programmation Les adresses et les pointeurs.
8PRO107 Éléments de programmation Les tableaux. Étude de cas 1 Description du problème : Lire une liste d’entiers et l’afficher d’abord dans le même ordre.
PRO-1027 Programmation Scientifique en C
Langage de Programmation Orientée Objet : C++
3ième Classe (Mardi, 23 Septembre) CSI2572. O jourd'8: E Allocation de mémoire E Déallocation de mémoire E Tableaux (n dimensions) E Arithmetique des.
Organisation de la mémoire pour le langage minimal Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Conception de Programmes - IUT de Paris - 1ère année Les classes Introduction Déclaration d’une classe Utilisation d’une classe Définition des.
C++ BY AURÉLIEN MODULO MARION. PLAN DES TROIS PRÉSENTATIONS C++ avancé C++ orienté objet Bases de C++
Transcription de la présentation:

Conception de Programmes - IUT de Paris - 1ère année Quelques éléments du langage C++ Les références La surcharge de fonctions Les fonctions « en ligne » Les fonctions d’allocation mémoire

Conception de Programmes - IUT de Paris - 1ère année Les références En C, les paramètres sont toujours passés par valeur void f(int i) { int a = 10; i = a; } void g(int* i) { int a = 20; *i = a; } void main(void) { int x = 100; f(x); // la valeur de x cout << x; g(&x); // la valeur de &x cout << x; }

Conception de Programmes - IUT de Paris - 1ère année En C++, un nouveau type de passage des paramètres: le passage de paramètre par référence La modification de la valeur d’un paramètre passé par référence est répercutée au niveau de l’appelant Techniquement, c’est l’adresse de la variable fournie en paramètre qui est transmise void h(int &i) { int a = 30; i = a; } void main(void) { int x = 100; h(x); // une référence sur x cout << x; }

Conception de Programmes - IUT de Paris - 1ère année Ne pas confondre l’opérateur & permettant d ’obtenir l ’adresse d’une variable et le signe & des références De manière générale, à partir de n’importe quel type T, on peut construire les nouveaux types suivants: –T* : pointeur vers une donnée de type T ( int* pi ) –T[] : tableau de données de type T ( char s[256] ) –T& : référence vers une donnée de type T ( int &ri ) & et * ont une écriture préfixée et [] a une écriture suffixée. [] est prioritaire par rapport à * et à & –int * t[10] : t est un tableau de 10 pointeurs d’entiers –int (*p)[10] : p est un pointeur sur un tableau de 10 entiers

Conception de Programmes - IUT de Paris - 1ère année Une référence est un nom alternatif pour une variable int i = 10; int& ri = i;// i et ri désigne la même variable int j = ri; // j = 10 ri = 20;// i = 20 Une référence doit être initialisée au moment de sa déclaration et référencera toujours la même variable. Une référence peut être assimilé à un pointeur constant. ri++; // rr est inchangée, i est incrémentée Une référence peut être initialisée comme référençant une constante uniquement si cela est explicitement indiqué char& rc = ‘a’; // illégal const char& rc = ‘a’; // légal

Conception de Programmes - IUT de Paris - 1ère année Utilisations classiques des références Paramètres par références void swap(int& a, int& b) { int tmp = a; a = b; b = tmp; } Attention: les paramètres effectifs ne peuvent être que des variables contre-exemples : swap(2, 3) et swap(a+b, c*d) Paramètres par références vers des constantes void print(const BigStruct& b) { cout << b.nom << … << endl; } Il n’y a aucune contrainte sur les paramètres effectifs. On cumule les avantages du passage de paramètre par adresse et la facilité d’écriture. Enfin, le compilateur contrôle que le contenu de la variable n’est pas modifié.

Conception de Programmes - IUT de Paris - 1ère année Cas particulier void particulier(const int& a) {... } particulier(1); L’appel de fonction provoque: L’allocation d’une variable temporaire Son initialisation avec la valeur 1 L’appel de la fonction avec en paramètre une référence vers la variable temporaire Au retour de la fonction, la variable temporaire est désallouée.

Conception de Programmes - IUT de Paris - 1ère année Référence rendue par une fonction int& AccesAge(Personne P[], char *nom) { for (int i=0; i<max; i++) if (strcmp(P[i].nom, nom)==0) return P[i].age; // problème si le nom est introuvable } void main(void) { Personne Tab[10];... AccesAge(Tab, «dupont») = 22; }

Conception de Programmes - IUT de Paris - 1ère année La surcharge de fonctions Lorsque plusieurs fonctions effectuent la même tâche sur des objets de type différent, il est souhaitable de leur donner le même nom. C’est déjà le cas pour les opérateurs arithmétiques sur les entiers et les réels. Exemple: void print(int); // affiche un entier void print(const char *); // affiche une chaîne

Conception de Programmes - IUT de Paris - 1ère année Lorsqu’une fonction f est appelée, le compilateur cherche à déterminer quelle fonction de nom f est invoquée. Ce choix est réalisé en comparant le nombre et le type des paramètres effectifs avec le nombre et le type des paramètres formels. Le principe est d’invoquer le fonction ayant la « meilleure » correspondance d’arguments (des conversions implicites peuvent intervenir). Exemple void print(double); void print(float); print(1L); // invoque print(long) print(1.0); // invoque print(float) print(1); // erreur 2 candidats?

Conception de Programmes - IUT de Paris - 1ère année Deux fonctions ne peuvent être distinguées par le type de la valeur retournée. La surcharge de fonction peut être employée pour réaliser l’effet d’un argument par défaut. Exemple void print(int value, int base) { … } void print(int value) { print(value, 10); }

Conception de Programmes - IUT de Paris - 1ère année Les fonctions « en ligne » Le mot clé inline précédant une définition de fonction indique au compilateur qu’il peut essayer d’expanser en ligne les appels de celle-ci plutôt que de la coder et d’utiliser les mécanismes d’appel standard. Il permet d’optimiser les performances de vos programmes Exemple inline fac(int i) { return (i<2) ? i : i*fac(i-1); }

Conception de Programmes - IUT de Paris - 1ère année Selon les compilateurs, un appel à fac(6) peut être expansé en la constante 720 ou en 6*5*4*3*2*1 ou encore en un appel classique de fac(6). inline n’affecte en rien la signification de l’appel de fonction et en particulier le contrôle de type.

Conception de Programmes - IUT de Paris - 1ère année Les fonctions d’allocation mémoire L’allocation dynamique et la désallocation de mémoire sont réalisées respectivement par les opérateurs new et delete. L’opérateur new prend en paramètre un nom de type et rend un pointeur vers la zone mémoire allouée ( 0 en cas d’échec). L ’opérateur delete prend en paramètre un pointeur retourné par new ou un pointeur nul. Dans le premier cas, delete libère la zone mémoire, dans le second, il est sans effet.

Conception de Programmes - IUT de Paris - 1ère année Exemple: int *pi = new int; *pi = 12; delete pi; new et delete peuvent aussi être employés pour créer des tableaux: char *s = new char[strlen(nom)+1]; strcpy(s, nom); delete[] s;