Cours C++ Spécificités du C++ (hors POO) références, allocation dynamique de mémoire...

Documents pareils
Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

1.6- Génération de nombres aléatoires

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Claude Delannoy. 3 e édition C++

Cours d Algorithmique et de Langage C v 3.0

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Introduction au langage C

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C


Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

Programmation en C/C++

C++ Programmer. en langage. 8 e édition. Avec une intro aux design patterns et une annexe sur la norme C++11. Claude Delannoy

Le langage C++ (partie I)

Cours d initiation à la programmation en C++ Johann Cuenin

Introduction à l héritage en C++

Programmation C++ (débutant)/instructions for, while et do...while

Programme Compte bancaire (code)

et Programmation Objet

Le langage C. Séance n 4

INFO-F-105 Language de programmation I Séance VI

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Java Licence Professionnelle CISII,

Bases de programmation. Cours 5. Structurer les données

Introduction à l algorithmique et à la programmation M1102 CM n 3

Introduction à C++ et à wxwidgets

COMPARAISONDESLANGAGESC, C++, JAVA ET

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Conventions d écriture et outils de mise au point

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Programmation stochastique

Génie Logiciel I. Cours VI - Typage statique / dynamique, fonctions virtuelles et classes abstraites, flots d entrées / sorties, et string

Plan Pédagogique du cours

INF111. Initiation à la programmation impérative en C amini/cours/l1/inf111/ Massih-Reza Amini

as Architecture des Systèmes d Information

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Argument-fetching dataflow machine de G.R. Gao et J.B. Dennis (McGill, 1988) = machine dataflow sans flux de données

I. Introduction aux fonctions : les fonctions standards

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi module

Département Automatisation et Informatisation Année Programmation en C++ Institut des Sciences et Techniques de l Ingénieur d Angers

Premiers Pas en Programmation Objet : les Classes et les Objets

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Introduction au pricing d option en finance

Traduction des Langages : Le Compilateur Micro Java

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

Rappels Entrées -Sorties

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Le prototype de la fonction main()

Une introduction à Java

Programmer en JAVA. par Tama

Chapitre 1 : La gestion dynamique de la mémoire

Notions fondamentales du langage C# Version 1.0

Algorithmique et Programmation, IMA

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

Langage C. Patrick Corde. 22 juin Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin / 289

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

TP : Gestion d une image au format PGM

Cours 1: Java et les objets

IUT ANNECY Département Mesures Physiques Cours d informatique Initiation au langage C

1 Définition et Appel d une fonction. V. Phan Luong. Cours 4 : Fonctions

Notes du cours 4M056 Programmation en C et C++ Vincent Lemaire et Damien Simon

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Compression de Données - Algorithme de Huffman Document de Conception

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

IRL : Simulation distribuée pour les systèmes embarqués

LE LANGAGE C++ ENAC 1997 A. DANCEL

30.avr.10 Présentation miniprojet. 9.mars.10 Cours 3 4.mai.10 Cours C mars.10 Cours 4 11.mai.10 Cours C++ 2

SUPPORT DE COURS. Langage C

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

PHP. PHP et bases de données

TP3 : Manipulation et implantation de systèmes de fichiers 1

Cours de Programmation Impérative: Zones de mémoires et pointeurs

Avertissement : Ce cours suppose la connaissance et la maîtrise du langage C CONTENU DU COURS BIBLIOGRAPHIE

Programmation Orientée Objet Java

Chapitre 2. Classes et objets

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Projet L1, S2, 2015: Simulation de fourmis, Soutenance la semaine du 4 mai.

TP1. Outils Java Eléments de correction

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

UE Programmation Impérative Licence 2ème Année

Les structures. Chapitre 3

Informatique III: Programmation en C++

Analyse de sécurité de logiciels système par typage statique

Programmation système I Les entrées/sorties

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

STAGE IREM 0- Premiers pas en Python

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Langage Java. Classe de première SI

Programmation en Java IUT GEII (MC-II1) 1

OS Réseaux et Programmation Système - C5

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

ACTIVITÉ DE PROGRAMMATION

Utilisation d objets : String et ArrayList

Transcription:

Cours C++ Spécificités du C++ (hors POO) références, allocation dynamique de mémoire...

Spécifités notables du C++ Référence Allocation dynamique de mémoire : opérateur new et delete Librairie standard Déclaration des variables (emplacement libre) Arguments par défaut de fonction Surdéfinition de fonction Type bool Espace de noms Spécificités du C++ (hors POO) références, allocation dynamique de mémoire... 1

Rappels sur les adresses et pointeurs Tout objet manipulé par l ordinateur est stocké en mémoire. Selon la nature de l objet, l espace en mémoire alloué varie : par exemple, entier = 32 ou 64 bits L adresse est l endroit où se trouve la variable en mémoire. Elle s obtient via la syntaxe suivante : &NomDeLaVariable L adresse n étant ni plus ni moins qu une valeur, on peut donc stocker cette valeur dans une variable : un pointeur est ainsi un conteneur d adresse Déclaration d un pointeur : int i = 10; int * pt_i = &i; int j = *pt_i; Spécificités du C++ (hors POO) références, allocation dynamique de mémoire... 2

Notion de référence en C++ Le C++ introduit la notion de référence afin de faciliter la manipulation des variables // Pointeur int i = 10; int * pt_i; pt_i = &i; (*pt_i)++; // Référence int i = 10; int & ref_i = i; // ref_i est une référence à i ref_i++; La déclaration d une référence ne crée pas de nouvel objet Toute référence doit se référer à un identificateur : int & ref_i; ne compilera pas. Il est nécessaire d initialiser une référence. Une référence pointe toujours vers le même objet, on ne peut pas changer sa destination. Spécificités du C++ (hors POO) références, allocation dynamique de mémoire... 3

Références en tant qu arguments de fonctions Transmission par adresse void echange(int * a, int * b) int c = *a; *a = *b; *b = c;... int x = 10; int y = 20; echange(&x, &y); Transmission par référence void echange(int & a, int & b) int c = a; a = b; b = c;... int x = 10; int y = 20; echange(x, y); Spécificités du C++ (hors POO) références, allocation dynamique de mémoire... 4

Références en tant qu arguments de fonctions Transmission par adresse void echange(int * a, int * b) int c = *a; *a = *b; *b = c;... int x = 10; int y = 20; echange(&x, &y); Transmission par référence void echange(int & a, int & b) int c = a; a = b; b = c;... int x = 10; int y = 20; echange(x, y); Spécificités du C++ (hors POO) références, allocation dynamique de mémoire... 4

Allocation dynamique de mémoire L allocation dynamique de mémoire est nécessaire dès lors que la taille d un objet (ou sa nature) n est connue que lors de l exécution du programme. Dans le cas d un tableau de taille n, la déclaration unsigned int n = 0; std::cin >> n; double tableau[n]; n est pas correcte du fait que le compilateur ne connait pas, au préalable, l espace mémoire nécessaire à l allocation (statique). Spécificités du C++ (hors POO) références, allocation dynamique de mémoire... 5

Utilisation des opérateurs new et delete Pour rappel, en langage C, la gestion dynamique de mémoire fait appel aux fonctions malloc et free (librairie stdlib.h) C++ propose deux nouveaux opérateurs : new alloue une certaine quantité de mémoire et renvoie un pointeur sur le début du tableau : unsigned int n = 0; std::cin >> n; double * tableau = new double[n]; delete[] libère l espace mémoire : delete[] tableau; Spécificités du C++ (hors POO) références, allocation dynamique de mémoire... 6

Portée et durée de vie des variables Durée de vie limitée au bloc (ici boucle for) for (int i = 0; i < 10; i++) int k = 0; // À la fin du bloc, // destruction de k Durée de vie indépendante du bloc for (int i = 0; i < 10; i++) int * k = new int(0); // À la fin du bloc, // k existe en mémoire Fuite de mémoire garantie Spécificités du C++ (hors POO) références, allocation dynamique de mémoire... 7

Portée et durée de vie des variables Durée de vie limitée au bloc (ici boucle for) for (int i = 0; i < 10; i++) int k = 0; // À la fin du bloc, // destruction de k Durée de vie indépendante du bloc for (int i = 0; i < 10; i++) int * k = new int(0); // À la fin du bloc, // k existe en mémoire Fuite de mémoire garantie Spécificités du C++ (hors POO) références, allocation dynamique de mémoire... 7

Portée et durée de vie des variables Durée de vie limitée au bloc (ici boucle for) for (int i = 0; i < 10; i++) int k = 0; // À la fin du bloc, // destruction de k Durée de vie indépendante du bloc for (int i = 0; i < 10; i++) int * k = new int(0);... delete k; Spécificités du C++ (hors POO) références, allocation dynamique de mémoire... 8

Portée et durée de vie des variables Allocation sur la pile, stack (automatique) int * pointeur_dix() int a = 10; return &a; int main() int * pb = pointeur_dix(); cout << *pb << endl; Allocation sur le tas, heap return 0; Spécificités du C++ (hors POO) références, allocation dynamique de mémoire... 9

Portée et durée de vie des variables Allocation sur la pile, stack (automatique) int * pointeur_dix() int a = 10; return &a; int main() int * pb = pointeur_dix(); cout << *pb << endl; return 0; Le pointeur retourné contient une adresse obsolète Allocation sur le tas, heap int * pointeur_dix() int * pa = new int(10); return pa; int main() int * pb = pointeur_dix(); cout << *pb << endl; delete pb; return 0; Spécificités du C++ (hors POO) références, allocation dynamique de mémoire... 10

Portée et durée de vie des variables Allocation sur la pile, stack (automatique) int * pointeur_dix() int a = 10; return &a; int main() int * pb = pointeur_dix(); cout << *pb << endl; return 0; Le pointeur retourné contient une adresse obsolète Allocation sur le tas, heap int * pointeur_dix() int * pa = new int(10); return pa; int main() int * pb = pointeur_dix(); cout << *pb << endl; delete pb; return 0; Spécificités du C++ (hors POO) références, allocation dynamique de mémoire... 10

Librairie standard et déclaration de variables Les bibliothèques du C ont été optimisées aux besoins du C++ et de nombreuses autres spécifiques au C++ existent, l ensemble formant la bibliothèque standard du C++ (standard library (std)). // Inclusion en C #include <math.h> #include <time.h> // Inclusion en C++ #include <cmath> #include <ctime> Possibilité de déclarer les variables locales quel que soit l endroit for (int i = 0 ; i < 10 ; i++)... Spécificités du C++ (hors POO) références, allocation dynamique de mémoire... 11

Arguments par défaut de fonctions C++ autorise l utilisation de valeurs par défaut dans les prototypes de fonction // Prototype de fonction void initialize(const double abs, const double ord = 3.4); int main() initialize(1.0); void initialize(const double abs, const double ord)... En l absence de second argument, le compilateur assigne la valeur 3.4 à la variable ord Les arguments concernés doivent obligatoirement être les derniers dans la liste. Spécificités du C++ (hors POO) références, allocation dynamique de mémoire... 12

Surdéfinition (surcharge) de fonctions En C++ deux fonctions peuvent porter le même nom dès lors qu elles n ont pas les mêmes types d argument void dummy(int i, double a, char c); void dummy(int i, int a, char c); void dummy(int i); Le compilateur se charge d appeler la bonne fonction par rapport au contexte i.e. au vu de la liste d arguments donnée lors de l appel. int main() dummy(1, 1.0, 'a'); dummy(1, 1, 'a'); dummy(1); Spécificités du C++ (hors POO) références, allocation dynamique de mémoire... 13

Surdéfinition (surcharge) de fonctions En C++ deux fonctions peuvent porter le même nom dès lors qu elles n ont pas les mêmes types d argument void dummy(int i, double a, char c); void dummy(int i, int a, char c); void dummy(int i); Le compilateur se charge d appeler la bonne fonction par rapport au contexte i.e. au vu de la liste d arguments donnée lors de l appel. int main() dummy(1, 1.0, 'a'); dummy(1, 1, 'a'); dummy(1); Spécificités du C++ (hors POO) références, allocation dynamique de mémoire... 13

Le type bool Ce nouveau type est naturellement formé de deux valeurs notées true et false bool is_ok = true; if (is_ok)... bool is_java_idiom = false; bool is_c_idiom = is_ok &&!is_java_idiom; Spécificités du C++ (hors POO) références, allocation dynamique de mémoire... 14

Les espaces de noms Les espaces de noms sont des zones de déclaration qui permettent de délimiter la recherche des noms des identificateurs par le compilateur. #include <iostream> using namespace std;... cout << "Standard output" << endl;... Leur but est principalement d éviter les conflits de noms entre plusieurs parties d un projet (et permet souvent une syntaxe moins lourde ) #include <iostream> using namespace std;... std::cout << "Standard output" << std::endl;... Spécificités du C++ (hors POO) références, allocation dynamique de mémoire... 15

Les espaces de noms namespace utl void dump() cout << "utl::dump" << endl; namespace io void dump() cout << "io::dump" << endl; // Utilisation de l'espace de nom io using namespace io; int main() // Par défaut, io::dump() dump(); // Précision de l'espace de nom utl::dump(); io::dump(); Spécificités du C++ (hors POO) références, allocation dynamique de mémoire... 16

Les espaces de noms namespace utl void dump() cout << "utl::dump" << endl; namespace io void dump() cout << "io::dump" << endl; // Utilisation de l'espace de nom io using namespace io; int main() // Par défaut, io::dump() dump(); // Précision de l'espace de nom utl::dump(); io::dump(); Spécificités du C++ (hors POO) références, allocation dynamique de mémoire... 16