1 Programmation en C++ Cycle de vie ● La vie d'un objet ● Destructeur ● Gestion de mémoire dynamique.

Slides:



Advertisements
Présentations similaires
Introduction à la Programmation Orientée Objet H.GATI.
Advertisements

Informatique 1A Langage C 6 ème séance 1. Objectifs de la séance 6  Allocation dynamique de mémoire  Application à la création de tableaux 2.
Informatique 2A Langage C 3 ème séance.
Cours de Langage C Les structures
1 Programmation Orientée Objet ● Qu'est-ce qu'un objet ● Collaboration des objets ● Les classes ● Relations entre les classes – “Utilise”, “Contient”,
Tableaux et Pointeurs Chaînes de Caractères Programmation Impérative II.
1 Programmation en C++ Fonctions ● Déclaration et définition de fonctions ● Arguments ● Surcharge ● Arguments optionnels ● Fonctions constantes ● Fonctions.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Fonctions ● Namespace ● Tests ● Boucles ● Pointeurs, références.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Types et opérations fondamentales ● Tests ● Boucles ● Pointeurs, références.
CINI – Li115 1 Semaine 11 Les pointeurs (suite) ● Tableaux et pointeurs ● Questions sur les pointeurs.
1 Programmation en C++ IO en C++/SL ● Standard Library ● Types, objets pour IO ● L'entrée de clavier ● Sortie à l'écran ● Fichiers.
1 Bonnes Pratiques ● Indentation ● Présentation ● Initialisation des variables ● Conditions ● Gestion d'erreurs ● Conventions.
Les PREF, DEC, et jauges outils En tournage, puis en fraisage En fraisage directement P roductique M écanique U sinage Tâche principale : La mise en œuvre.
Cross-Plateform Cours JavaScript
Programmation en C++ Standard Library
AMUE – SIFAC Gestion des services fait sur SIFAC WEB
I- ANALYSE DU BESOIN / Plan
LES TABLEAUX EN JAVA.
Pointeurs et langage C.
Détection des erreurs.
Ajouter le code dans une page html
Semaine 11 Les pointeurs (suite)
JAVA et POO : Notion d'héritage
Programmation en C++ Fonctions
Gestion dynamique de la mémoire : new / delete
Javadoc et débogueur Semaine 03 Version A16.
Principes de programmation (suite)
Réalisation d'agents de surveillance Zephir
Semaine #7 INF130 par Frédérick Henri.
Algorithmique & Langage C
Présentation Structure données abstraite (TDA) Rappel : File
Semaine #4 INF130 par Frédérick Henri.
Programmation en C++ IO en C++/SL
1ers pas des utilisateurs migrés
PROGRAMMATION INFORMATIQUE D’INGÉNIERIE II
Programmation en C++ Classes
Algorithmique & Langage C IUT GEII S1 Notes de cours (deuxième partie)
Programmation en C++ Fonctions
Documentation technique (Linux)
Notion De Gestion De Bases De Données
PROGRAMMATION INFORMATIQUE D’INGÉNIERIE II
Programmation en C++ C++ de base
Chapter 12: Structures de données
Programmation Orientée Objet
Exercice : le jeu. Vous devez concevoir l’algorithme permettant de jouer avec votre calculatrice : elle détermine au hasard un nombre caché entier entre.
CountrySTAT / FENIX Aperçu globale de la préparation des tableaux dans la nouvelle plateforme CountrySTAT FORMATION DES POINTS FOCAUX SUR LE SYSTEME.
FAIRE UN BLOG D'ECOLE Un exemple détaillé.
Co-produits Management (Version Level: C)
Programmation Android Composantes d’une application
Les classes et les objets
Module 13 : Implémentation de la protection contre les sinistres
Langages de programmation TP11
03- Evaluation Access 2003 Cette évaluation comporte des QCM (1 seule réponse) et des Zones à déterminer dans des copies d’écran.
Bonjour, Je suis votre guide pour cette visite de votre nouveau logiciel HDS. Je vais vous montrer comment préparer une note de frais.
Module 5 : Gestion de l'accès aux ressources à l'aide de groupes
Chapitre V La Procédure Comptable
ENSEIGNER L’ALGORITHMIQUE ET LA PROGRAMMATION AU COLLÈGE
‘Chief Marshal’ Connaissances et concentration Comité technique IWF
Formation « Utiliser un site Internet école »
Le langage C# : Partie 1.
INTERFACE ET POLYMORPHISME
Tableaux croisés dynamiques sous Excel: des outils simples pour une analyse rapide de jeux de données en cytométrie Camille SANTA MARIA Ingénieur d’étude.
renvoie la moyenne d’un tableau d’entiers
Le Chronométreur doit posséder une licence d’Officiel Technique
03/05/2019 L’organisation et la gestion des fichiers sur le site collaboratif Martine Cochet 2SitePleiadeGestionFichiers.
Retour sur les interfaces
Support de formation Administrateur Portail RH
Python Nicolas THIBAULT
Les données structurées et leur traitement
Gestion des destinataires (recipients)
Transcription de la présentation:

1 Programmation en C++ Cycle de vie ● La vie d'un objet ● Destructeur ● Gestion de mémoire dynamique

2 Le cycle de vie d'un objet void UneFonction() { // Créer deux points Point point1(0, 0); Point point2(2, 3); // Calculer et imprimer leur distance std::cout << point1.Distance(point2) << std::endl; } Des objets « naissent » quand on appelle leurs constructeurs ● Les objets ont un cycle de vie – Nous avons déjà appris comment créer un objet: Que se passe-t-il maintenant? ● Après avoir quitté la fonction (hors de portée) les deux points ont été détruits automatiquement

3 Les types de cycle de vie d'un objet ● Le cycle de vie d'un objet = le temps pendant lequel la mémoire est allouée à l'objet, ou le temps entre la création et la destruction de l'objet ● Les trois types de cycle de vie d'un objet: – Automatique – l'objet est créé à sa déclaration et est détruit lorsqu'il devient hors de portée, lorsque l'on quitte le contexte qui le déclarait – Dynamique – l'objet est créé et détruit n'importe quand sous le contrôle du programmeur – Statique - l'objet est créé une fois et n'est détruit que quand le programme se termine ● Ne pas confondre avec la gestion automatique ● Nous n'allons pas discuter ce type en détails dans notre cours

4 Les types de cycle de vie d'un objet - Exemples Gestion automatique: void UneFonction() { // Créer un point Point point(0, 0); // Une utilisation du point } void UneAutreFonction() { // Créer un point Point* point1 = new Point(0, 0); // Une utilisation du point delete point1; } Gestion dynamique: La mémoire allouée par « point » est libérée automatiquement La mémoire allouée par « point » est libérée par le programmeur ● L'opérateur new effectue l'allocation de mémoire et l'appel du constructeur ● L'opérateur delete effectue l'appel du destructeur puis la libération de la mémoire ● La règle de programmation avec gestion de mémoire dynamique est de toujours vérifier que chaque « new » a son « delete »

5 Destructeur... Le destructeur est la fonction spéciale de la classe appelée juste avant que l'objet soit détruit class class-name { public: // fonctions pour construire l'objet // fonction appelée quand on détruit l'objet // fonctions pour manipuler l'objet // fonctions pour accéder à l'état de l'objet private: // fonctions pour utilisation intérieure // données membres }; class Point { public: // fonctions pour construire l'objet Point(); Point(float x, float y); // fonction appelée quand on détruit l'objet ~Point(); // autres fonctions private: // données membres float m_x; float m_y; }; – Il y a un seul destructeur dans la classe

6... Destructeur Point::~Point() { /// Le destructeur de la classe std::cout << “Point est détruit” << std::endl; } – Si on exécute notre fonction après avoir ajouté notre destructeur, nous allons apercevoir des messages « Point est détruit » – La plupart du temps le destructeur est utilisé à libérer la mémoire qui a été allouée dynamiquement par l'objet ● Comme les données membres de notre classe Point sont gérées par gestion automatique, alors le destructeur n'a rien à faire

7 Gestion de mémoire dynamique class Point { public: Point(float x, float y); Point(); ~Point(); private: // données membres float* m_x; float* m_y; }; Point::Point(float x, float y) : m_x( new float(x) ), m_y( new float(y) ) { /// Le constructeur avec gestion de mémoire /// dynamique } Point::Point() : m_x(0), m_y(0) { /// Le constructeur par défaut } Point::~Point() { /// Le destructeur delete m_x; delete m_y; } L'initialisation de pointeurs est importante pour que delete s'accomplisse correctement Les données membres déclarées comme pointeurs

8 Les types fondamentaux, les tableaux ● Les variables simples (int, float,...) ont les mêmes types de vie Gestion automatique: void UneFonction() { // Un numéro int num = 153; // Un tableau int tab[20]; for ( int i=0; i<20; i++ ) tab[i] = i; // Un tableau des objets Point points[10]; } void UneAutreFonction() { // Un numéro int* num = new int(153); delete num; // Un tableau int* tab = new int[20]; for ( int i=0; i<20; i++ ) tab[i] = i; delete [ ] tab; // Un tableau des objets Point* points = new Point[10]; delete [ ] points; } Gestion dynamique: Attention à la notation delete [ ] pour un tableau Il est conseillé d'utiliser les conteneurs STL à la place de tableaux intégrés pour éviter les problèmes dus à la taille fixe des tableaux intégrés