Cours n o 2 Introduction au C++

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

Chap III : Les tableaux

Introduction au langage C

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

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

Les chaînes de caractères

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

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

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

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

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

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

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

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)

Cours d Algorithmique et de Langage C v 3.0

Conventions d écriture et outils de mise au point

Cours 1: Java et les objets

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

TP1 : Initiation à Java et Eclipse

Une introduction à Java

COMPARAISONDESLANGAGESC, C++, JAVA ET

Algorithmique et Programmation, IMA

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


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

Chapitre 1 : La gestion dynamique de la mémoire

Plan du cours. Historique du langage Nouveautés de Java 7

Introduction à l héritage en C++

et Programmation Objet

Programmation système I Les entrées/sorties

Programmation en Java IUT GEII (MC-II1) 1

as Architecture des Systèmes d Information

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

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

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

Introduction à C++ et à wxwidgets

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Programmation système de commandes en C

Claude Delannoy. 3 e édition C++

Le langage C. Séance n 4

Programmer en JAVA. par Tama

Java Licence Professionnelle CISII,

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

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

Programme Compte bancaire (code)

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

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

I. Introduction aux fonctions : les fonctions standards

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

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

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

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Premiers Pas en Programmation Objet : les Classes et les Objets

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

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

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

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

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Objets et Programmation. origine des langages orientés-objet

TP : Gestion d une image au format PGM

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Plan Pédagogique du cours

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Programmation stochastique

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

Introduction à la Programmation Parallèle: MPI

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

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

SUPPORT DE COURS. Langage C

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Aide mémoire UML & Java 1ère partie : Introduction. marc.lemaire@u-cergy.fr

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

Chapitre 2. Classes et objets

PROJET ALGORITHMIQUE ET PROGRAMMATION II

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

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

Les structures. Chapitre 3

Génie Logiciel avec Ada. 4 février 2013

TP1. Outils Java Eléments de correction

Utilisation d objets : String et ArrayList

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

Présentation du langage et premières fonctions

Rappels Entrées -Sorties

Chapitre 10. Les interfaces Comparable et Comparator 1

Le langage C++ (partie I)

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Travaux Dirigés n 1 : chaînes de caractères

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

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

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

LE LANGAGE C++ ENAC 1997 A. DANCEL

Tp 1 correction. Structures de données (IF2)

Initiation. àl algorithmique et à la programmation. en C

Langage Java. Classe de première SI

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

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

Quelques éléments de compilation en C et makefiles

Le système de gestion des fichiers, les entrées/sorties.

Programmation en C/C++

Les structures de données. Rajae El Ouazzani

Transcription:

Cours n o 2 Introduction au C++ Module Info3/M3105C Sebastien.Kramm@univ-rouen.fr IUT GEII Rouen 2016-2017 S. Kramm (IUT Rouen) Cours 2 2016-2017 1 / 37

Sommaire 1 Introduction 2 C++ = C amélioré 3 Programmation Orientée Objet avec C++ Structures de données en C Le mot-clé class Utilisation de classes A suivre... S. Kramm (IUT Rouen) Cours 2 2016-2017 2 / 37

Prérequis & Objectifs Prérequis : Langage C, Notions de base de P.O.O. Objectifs : Premiers éléments concrets sur le C++ Être capable : d écrire la déclaration et le code d une classe, de l utiliser dans un programme, de réaliser des entrées/sorties texte façon C++. Certains mécanismes ou particularités seront vus plus tard. S. Kramm (IUT Rouen) Cours 2 2016-2017 3 / 37

Historique Bjarne Stroustrup, 1982, A&T Lab S. Kramm (IUT Rouen) Cours 2 2016-2017 4 / 37

Historique Bjarne Stroustrup, 1982, A&T Lab Idées de base : S. Kramm (IUT Rouen) Cours 2 2016-2017 4 / 37

Historique Bjarne Stroustrup, 1982, A&T Lab Idées de base : Permettre la POO S. Kramm (IUT Rouen) Cours 2 2016-2017 4 / 37

Historique Bjarne Stroustrup, 1982, A&T Lab Idées de base : Permettre la POO Améliorer certains points du C S. Kramm (IUT Rouen) Cours 2 2016-2017 4 / 37

Historique Bjarne Stroustrup, 1982, A&T Lab Idées de base : Permettre la POO Améliorer certains points du C Garder la compatibilité (un compilateur C++ doit compiler du C) S. Kramm (IUT Rouen) Cours 2 2016-2017 4 / 37

Historique Bjarne Stroustrup, 1982, A&T Lab Idées de base : Permettre la POO Améliorer certains points du C Garder la compatibilité (un compilateur C++ doit compiler du C) Un langage en évolution : S. Kramm (IUT Rouen) Cours 2 2016-2017 4 / 37

Historique Bjarne Stroustrup, 1982, A&T Lab Idées de base : Permettre la POO Améliorer certains points du C Garder la compatibilité (un compilateur C++ doit compiler du C) Un langage en évolution : version 2.0 : 1989 S. Kramm (IUT Rouen) Cours 2 2016-2017 4 / 37

Historique Bjarne Stroustrup, 1982, A&T Lab Idées de base : Permettre la POO Améliorer certains points du C Garder la compatibilité (un compilateur C++ doit compiler du C) Un langage en évolution : version 2.0 : 1989 1ère normalisation ANSI/ISO : 1998, puis 2003 (C++03) S. Kramm (IUT Rouen) Cours 2 2016-2017 4 / 37

Historique Bjarne Stroustrup, 1982, A&T Lab Idées de base : Permettre la POO Améliorer certains points du C Garder la compatibilité (un compilateur C++ doit compiler du C) Un langage en évolution : version 2.0 : 1989 1ère normalisation ANSI/ISO : 1998, puis 2003 (C++03) Dernières normalisations : 2011 (C++11) et 2014 (C++14) S. Kramm (IUT Rouen) Cours 2 2016-2017 4 / 37

Historique Bjarne Stroustrup, 1982, A&T Lab Idées de base : Permettre la POO Améliorer certains points du C Garder la compatibilité (un compilateur C++ doit compiler du C) Un langage en évolution : version 2.0 : 1989 1ère normalisation ANSI/ISO : 1998, puis 2003 (C++03) Dernières normalisations : 2011 (C++11) et 2014 (C++14) La prochaine : 2017 S. Kramm (IUT Rouen) Cours 2 2016-2017 4 / 37

Historique Bjarne Stroustrup, 1982, A&T Lab Idées de base : Permettre la POO Améliorer certains points du C Garder la compatibilité (un compilateur C++ doit compiler du C) Un langage en évolution : version 2.0 : 1989 1ère normalisation ANSI/ISO : 1998, puis 2003 (C++03) Dernières normalisations : 2011 (C++11) et 2014 (C++14) La prochaine : 2017 C++ est doté d une bibliothèque standard qui permet la programmation générique : Implanter des traitements indépendamment du type de donnée Exemple : un algorithme de tri doit pouvoir fonctionner quel que soit la nature de l objet à trier. S. Kramm (IUT Rouen) Cours 2 2016-2017 4 / 37

C++ : Avantages et inconvénients Avantages : On peut continuer à faire du C Permet la P.O.O. Ecriture plus intuitive que le C Large communauté de développeurs Code rapide et efficace Transition facile depuis le C S. Kramm (IUT Rouen) Cours 2 2016-2017 5 / 37

C++ : Avantages et inconvénients Avantages : On peut continuer à faire du C Permet la P.O.O. Ecriture plus intuitive que le C Large communauté de développeurs Code rapide et efficace Transition facile depuis le C Inconvénients : On peut continuer à faire du C On peut mélanger C et C++ Syntaxe parfois délicate Langage incomplet : bibliothèque standard réduite, nécessité d utiliser fréquemment des bibliothèques tierces (réseaux, graphiques,...) S. Kramm (IUT Rouen) Cours 2 2016-2017 5 / 37

C++ : Avantages et inconvénients Avantages : On peut continuer à faire du C Permet la P.O.O. Ecriture plus intuitive que le C Large communauté de développeurs Code rapide et efficace Transition facile depuis le C Inconvénients : Ce qui ne change pas : Structures de contrôle ( if, for, while,... ) Types de base (int, float, char) Syntaxe générale :, - ; - - []... La bibliothèque standard C reste utilisable (fonctions mathématiques et autres). On peut continuer à faire du C On peut mélanger C et C++ Syntaxe parfois délicate Langage incomplet : bibliothèque standard réduite, nécessité d utiliser fréquemment des bibliothèques tierces (réseaux, graphiques,...) S. Kramm (IUT Rouen) Cours 2 2016-2017 5 / 37

Sommaire 1 Introduction 2 C++ = C amélioré 3 Programmation Orientée Objet avec C++ Structures de données en C Le mot-clé class Utilisation de classes A suivre... S. Kramm (IUT Rouen) Cours 2 2016-2017 6 / 37

Partie 1 : C++ = C amélioré Certains améliorations ne sont pas directement liée à la P.O.O. : Commentaires : // en début de ligne Emplacement libre des déclarations de variables E/S texte sans codes de format Type chaînes de caractères (string) Type de donnée booléen (bool) Arguments de fonctions par défaut Passage d arguments par référence : allège les lourdeurs et les risques liés au pointeurs Surdéfinition de fonction (surcharge) Opérateurs de gestion de mémoire dynamique new et delete Espaces de noms (namespace), utile pour gros projets. et d autres... S. Kramm (IUT Rouen) Cours 2 2016-2017 7 / 37

Déclaration de variables au plus près Supprime des possibilités d erreur : En C : int a, i, j = 5;... for( i=0; i<max; i++ ) {... }... a = i 3; // j en fait! Le compilateur ne détecte pas d erreur! S. Kramm (IUT Rouen) Cours 2 2016-2017 8 / 37

Déclaration de variables au plus près Supprime des possibilités d erreur : En C : int a, i, j = 5;... for( i=0; i<max; i++ ) {... }... a = i 3; // j en fait! Le compilateur ne détecte pas d erreur! En C++ : int j = 5;... for( int i=0; i<max; i++ ) {... // i n existe que dans ce bloc } int a = i 3 ; // j en fait! L erreur est détectée à la compilation, i n existe pas ici S. Kramm (IUT Rouen) Cours 2 2016-2017 8 / 37

E/S texte En C : printf()/scanf() souvent délicat : Erreurs de sens non détectées par le compilateur (par ex., %d pour afficher un flottant), Besoin de mémoriser les codes de format. En C++ : notion de flot ( stream ). La librairie standard C++ fournit les flots : cin : flot standard d entrée (équivalents à stdin en C), cout : flot standard de sortie (équivalents à stdout en C). opérateur << pour injecter quelque chose dans un flot. opérateur >> pour extraire des données d un flot. Formatage automatique, mais modifiable. S. Kramm (IUT Rouen) Cours 2 2016-2017 9 / 37

E/S texte : exemple Exemple : #include <iostream> using namespace std; int main() { int n; cout << "taper un nombre : "; cin >> n; cout << "vous avez tapé : " << n << endl; } Remarque : pas d extension aux fichiers d en-tête de la bibliothèque standard! S. Kramm (IUT Rouen) Cours 2 2016-2017 10 / 37

Chaînes de caractères En C, les chaînes sont gérées par des tableaux de char : char ch1[] = "Bonjour"; char ch2[] = ", Monsieur"; strcat( ch1, ch2 ); // fonction de concaténation Erreur à l exécution!!! S. Kramm (IUT Rouen) Cours 2 2016-2017 11 / 37

Chaînes de caractères En C, les chaînes sont gérées par des tableaux de char : char ch1[] = "Bonjour"; char ch2[] = ", Monsieur"; strcat( ch1, ch2 ); // fonction de concaténation Erreur à l exécution!!! Inconvénients : Manipulation délicate (utilisation de fonctions : strcpy(), strcat(),...), Risque élevé de corruption de mémoire, Allocation mémoire pas très optimale, ou compliquée. S. Kramm (IUT Rouen) Cours 2 2016-2017 11 / 37

Chaînes de caractères En C, les chaînes sont gérées par des tableaux de char : char ch1[] = "Bonjour"; char ch2[] = ", Monsieur"; strcat( ch1, ch2 ); // fonction de concaténation Erreur à l exécution!!! Inconvénients : Manipulation délicate (utilisation de fonctions : strcpy(), strcat(),...), Risque élevé de corruption de mémoire, Allocation mémoire pas très optimale, ou compliquée. La bibliothèque standard C++ propose la classe string Manipulation aisée : les opérateurs sont surdéfinis, Allocation mémoire automatisée, Plus de risque de corruption mémoire, Conversion du type char* au type string très facile. S. Kramm (IUT Rouen) Cours 2 2016-2017 11 / 37

Chaînes de caractères : la classe string Exemple complet : #include <string> using namespace std; int main() { string s; cout << "tapez votre nom : "; cin >> s; cout << "Bonjour, " << s << endl; } Concaténation : string s1( "abc" ); string s2( "def" ); string s = s1 + s2; cout << s << " : taille=" << s.size() << endl; va afficher : abcdef : taille= S. Kramm (IUT Rouen) Cours 2 2016-2017 12 / 37

Rappel : transmission d arguments par valeur En C/C++, lors d un appel de fonction avec passage d arguments, la fonction travaille sur une copie des arguments (copie sur la pile). int main() { int x, y = 2; x = carre( y ); } int carre( int a ) { return a a; } S. Kramm (IUT Rouen) Cours 2 2016-2017 13 / 37

Rappel : transmission d arguments par valeur En C/C++, lors d un appel de fonction avec passage d arguments, la fonction travaille sur une copie des arguments (copie sur la pile). int main() { int x, y = 2; x = carre( y ); } int carre( int a ) { return a a; } Conséquence : il est impossible à la fonction de modifier la valeur de la variable originelle elle ne sait pas où celle-ci se trouve dans la mémoire! S. Kramm (IUT Rouen) Cours 2 2016-2017 13 / 37

Transmission d arguments par adresse Pour écrire une fonction qui doit modifier les arguments transmis, on transmet l adresse de la variable, avec l opérateur adresse de (&). S. Kramm (IUT Rouen) Cours 2 2016-2017 14 / 37

Transmission d arguments par adresse Pour écrire une fonction qui doit modifier les arguments transmis, on transmet l adresse de la variable, avec l opérateur adresse de (&). Exemple : utilisation de la fonction scanf() : int a; printf( "Tapez un nombre :" ); scanf( "%d", &a ); S. Kramm (IUT Rouen) Cours 2 2016-2017 14 / 37

Transmission d arguments par adresse Pour écrire une fonction qui doit modifier les arguments transmis, on transmet l adresse de la variable, avec l opérateur adresse de (&). Exemple : utilisation de la fonction scanf() : int a; printf( "Tapez un nombre :" ); scanf( "%d", &a ); La fonction doit travailler sur des pointeurs : int a; // se lit : a est une variable qui contient une adresse, à laquelle se trouve un int int z = a; // se lit : copier dans z la valeur de // l entier se trouvant à l adresse a S. Kramm (IUT Rouen) Cours 2 2016-2017 14 / 37

Transmission d arguments par adresse : exemple Exemple : fonction de permutation de ses deux arguments : Utilisation de la fonction int main() { int x = 3 int y = 5;... swap( &x, &y );... } On passe à la fonction l adresse des variables. S. Kramm (IUT Rouen) Cours 2 2016-2017 15 / 37

Transmission d arguments par adresse : exemple Exemple : fonction de permutation de ses deux arguments : Utilisation de la fonction int main() { int x = 3 int y = 5;... swap( &x, &y );... } On passe à la fonction l adresse des variables. Definition de la fonction void swap( int a, int b ) { int temp = a; a = b; b = temp; } La fonction reçoit des pointeurs en argument. S. Kramm (IUT Rouen) Cours 2 2016-2017 15 / 37

C++ : passage d arguments par référence C++ introduit un nouveau mode de transmission des arguments : le passage par référence. Correspond aussi à une adresse, sans les inconvénients des pointeurs. Une référence est un alias sur la variable originelle : int& a = b; se lit a est un alias sur la variable b. La fonction de swap peut être écrite de la façon suivante : Utilisation de la fonction int main() { int x = 3 int y = 5;... swap( x, y );... } S. Kramm (IUT Rouen) Cours 2 2016-2017 16 / 37

C++ : passage d arguments par référence C++ introduit un nouveau mode de transmission des arguments : le passage par référence. Correspond aussi à une adresse, sans les inconvénients des pointeurs. Une référence est un alias sur la variable originelle : int& a = b; se lit a est un alias sur la variable b. La fonction de swap peut être écrite de la façon suivante : Utilisation de la fonction Definition de la fonction int main() { int x = 3 int y = 5;... swap( x, y );... } void swap( int& a, int& b ) { int temp = a; a = b; b = temp; } La fonction reçoit des références sur les variables transmises. S. Kramm (IUT Rouen) Cours 2 2016-2017 16 / 37

Sommaire 1 Introduction 2 C++ = C amélioré 3 Programmation Orientée Objet avec C++ Structures de données en C Le mot-clé class Utilisation de classes A suivre... S. Kramm (IUT Rouen) Cours 2 2016-2017 17 / 37

Sous-sommaire 1 Introduction 2 C++ = C amélioré 3 Programmation Orientée Objet avec C++ Structures de données en C Le mot-clé class Utilisation de classes A suivre... S. Kramm (IUT Rouen) Cours 2 2016-2017 18 / 37

En C : Le mot clé struct En C, les structures permettent déjà de créer des types de données composés : typedef struct ma_voiture { int marque; int couleur; char immat[8]; } VOITURE; S. Kramm (IUT Rouen) Cours 2 2016-2017 19 / 37

En C : Le mot clé struct En C, les structures permettent déjà de créer des types de données composés : typedef struct ma_voiture { int marque; int couleur; char immat[8]; } VOITURE; On peut créer en mémoire des objets ( instancier ) de ce type comme n importe quel autre type de variable : int i; float f; VOITURE v; S. Kramm (IUT Rouen) Cours 2 2016-2017 19 / 37

En C : Le mot clé struct En C, les structures permettent déjà de créer des types de données composés : typedef struct ma_voiture { int marque; int couleur; char immat[8]; } VOITURE; On peut créer en mémoire des objets ( instancier ) de ce type comme n importe quel autre type de variable : On accède aux données (champs) avec l opérateur. int i; float f; VOITURE v; v.marque = PEUGEOT; S. Kramm (IUT Rouen) Cours 2 2016-2017 19 / 37

Limitations des struct en C Mais : On ne peut pas associer des fonctions aux structures ; Pas d initialisation par défaut : les valeurs sont indéterminées ; Pas de protection des données (pas d encapsulation) ; Pas d héritage possible (mais agrégation possible). S. Kramm (IUT Rouen) Cours 2 2016-2017 20 / 37

Limitations des struct en C Mais : On ne peut pas associer des fonctions aux structures ; Pas d initialisation par défaut : les valeurs sont indéterminées ; Pas de protection des données (pas d encapsulation) ; Pas d héritage possible (mais agrégation possible). Exemple d agregation : #include "roue.h" #include "moteur.h" struct VOITURE { int marque; int couleur; char immat[8]; ROUE av_g, av_d, ar_g, ar_d; MOTEUR mot; }; S. Kramm (IUT Rouen) Cours 2 2016-2017 20 / 37

Sous-sommaire 1 Introduction 2 C++ = C amélioré 3 Programmation Orientée Objet avec C++ Structures de données en C Le mot-clé class Utilisation de classes A suivre... S. Kramm (IUT Rouen) Cours 2 2016-2017 21 / 37

P.O.O en C++ : classe d objet Le C++ introduit le mot clé class, qui permet de déclarer une classe : liste des attributs ( = champs de données), liste des méthodes ( = fonctions associées à l objet). // voiture.h class VOITURE { private: int marque; int couleur; bool en_marche; Cette déclaration se fait dans un fichier d en-tête (header file), avec l extension.h ou.hpp Ce fichier devra être inclus (#include) dans tous les programmes qui utilisent cette classe. public: void demarre(); void arrete(); }; S. Kramm (IUT Rouen) Cours 2 2016-2017 22 / 37

Partie publique & privée On précise quelles sont les attributs/méthodes accessibles (visibles) de l extérieur avec les mots-clés private et public. Partie public Cette partie s appelle l interface : c est ce qui est accessible de l extérieur, ce qu on peut faire avec les objets de ce type. S. Kramm (IUT Rouen) Cours 2 2016-2017 23 / 37

Partie publique & privée On précise quelles sont les attributs/méthodes accessibles (visibles) de l extérieur avec les mots-clés private et public. Partie public Cette partie s appelle l interface : c est ce qui est accessible de l extérieur, ce qu on peut faire avec les objets de ce type. Partie private Cette partie contient les données internes de l objet, elles seront inaccessibles de l extérieur (principe d encapsulation). S. Kramm (IUT Rouen) Cours 2 2016-2017 23 / 37

Partie publique & privée On précise quelles sont les attributs/méthodes accessibles (visibles) de l extérieur avec les mots-clés private et public. Partie public Cette partie s appelle l interface : c est ce qui est accessible de l extérieur, ce qu on peut faire avec les objets de ce type. Partie private Cette partie contient les données internes de l objet, elles seront inaccessibles de l extérieur (principe d encapsulation). L ensemble des données détermine l empreinte mémoire de la classe : nombre d octets occupé par un objet de ce type. S. Kramm (IUT Rouen) Cours 2 2016-2017 23 / 37

Partie publique & privée On précise quelles sont les attributs/méthodes accessibles (visibles) de l extérieur avec les mots-clés private et public. Partie public Cette partie s appelle l interface : c est ce qui est accessible de l extérieur, ce qu on peut faire avec les objets de ce type. Partie private Cette partie contient les données internes de l objet, elles seront inaccessibles de l extérieur (principe d encapsulation). L ensemble des données détermine l empreinte mémoire de la classe : nombre d octets occupé par un objet de ce type. (Remarque : on pourra aussi avoir des méthodes privées, qui ne pourront être appelées que par des méthodes publiques.) S. Kramm (IUT Rouen) Cours 2 2016-2017 23 / 37

Exercice : empreinte mémoire Donner l empreinte mémoire de la classe VOITURE : Donner l empreinte mémoire de la classe suivante : class ABCDEFG { private: char code; int v1, v2; float resultat; char nom[15]; }; S. Kramm (IUT Rouen) Cours 2 2016-2017 24 / 37

Définition des méthodes La définition des méthodes de la classe est effectuée séparément, dans le fichier d implémentation de la classe (.cpp) : // voiture.cpp #include "voiture.h" void VOITURE::demarre() { en_marche = true; } void VOITURE::arrete() { en_marche = false; } On doit utiliser l opérateur de résolution de portée (::) pour indiquer l appartenance à la classe de cette fonction. S. Kramm (IUT Rouen) Cours 2 2016-2017 25 / 37

Sous-sommaire 1 Introduction 2 C++ = C amélioré 3 Programmation Orientée Objet avec C++ Structures de données en C Le mot-clé class Utilisation de classes A suivre... S. Kramm (IUT Rouen) Cours 2 2016-2017 26 / 37

Utilisation d une classe Le programme principal (main.cpp) va utiliser des classes, en plus des types de base (int,float,... ) S. Kramm (IUT Rouen) Cours 2 2016-2017 27 / 37

Utilisation d une classe Le programme principal (main.cpp) va utiliser des classes, en plus des types de base (int,float,... ) Ces classes pourront être issues d un développement personnel, ou d une bibliothèque tierce. S. Kramm (IUT Rouen) Cours 2 2016-2017 27 / 37

Utilisation d une classe Le programme principal (main.cpp) va utiliser des classes, en plus des types de base (int,float,... ) Ces classes pourront être issues d un développement personnel, ou d une bibliothèque tierce. Il est impératif d inclure dans main.cpp les fichiers de déclaration des classes utilisées. S. Kramm (IUT Rouen) Cours 2 2016-2017 27 / 37

Utilisation d une classe Le programme principal (main.cpp) va utiliser des classes, en plus des types de base (int,float,... ) Ces classes pourront être issues d un développement personnel, ou d une bibliothèque tierce. Il est impératif d inclure dans main.cpp les fichiers de déclaration des classes utilisées. Comme en C, on instancie un objet dans un programme avec une déclaration. (objet et variable sont des synonymes) : S. Kramm (IUT Rouen) Cours 2 2016-2017 27 / 37

Utilisation d une classe Le programme principal (main.cpp) va utiliser des classes, en plus des types de base (int,float,... ) Ces classes pourront être issues d un développement personnel, ou d une bibliothèque tierce. Il est impératif d inclure dans main.cpp les fichiers de déclaration des classes utilisées. Comme en C, on instancie un objet dans un programme avec une déclaration. (objet et variable sont des synonymes) : S. Kramm (IUT Rouen) Cours 2 2016-2017 27 / 37

Utilisation d une classe Le programme principal (main.cpp) va utiliser des classes, en plus des types de base (int,float,... ) Ces classes pourront être issues d un développement personnel, ou d une bibliothèque tierce. Il est impératif d inclure dans main.cpp les fichiers de déclaration des classes utilisées. Comme en C, on instancie un objet dans un programme avec une déclaration. (objet et variable sont des synonymes) : // main.cpp #include "voiture.h" int main() { int a; // creation d un objet a de type int VOITURE b; // creation d un objet b de type VOITURE... } S. Kramm (IUT Rouen) Cours 2 2016-2017 27 / 37

Protection (encapsulation) Le principe d encapsulation (mot-clé private) interdit au programme utilisateur de la classe la manipulation directe des attributs : VOITURE v1;... v1.marque = PEUGEOT; // écriture cout << "marque = "<< v1.marque; // lecture... Erreur à la compilation! S. Kramm (IUT Rouen) Cours 2 2016-2017 28 / 37

Accesseurs / Mutateurs (1) Les attributs sont privés (principe d encapsulation). On y accède à travers des méthodes (interface), qu il faut écrire : mutateur : écriture (Set...), accesseur : lecture (Get...),. class VOITURE { private: int vitesse_max; public: int get_vmax(); // renvoie la vit. maxi void set_vmax( int max ); // modifie la vit. maxi }; S. Kramm (IUT Rouen) Cours 2 2016-2017 29 / 37

Accesseurs / Mutateurs (2) L accesseur se contente en général de fournir la valeur cachée dans l implémentation : int VOITURE::get_vmax() { return vitesse_max; } S. Kramm (IUT Rouen) Cours 2 2016-2017 30 / 37

Accesseurs / Mutateurs (2) L accesseur se contente en général de fournir la valeur cachée dans l implémentation : int VOITURE::get_vmax() { return vitesse_max; } Le mutateur vérifie que la nouvelle valeur est cohérente avant de la mémoriser : void VOITURE::set_vmax( int max ) { if( max < 0 ) cout << "erreur : vit. < 0!\n"; else vitesse_max = max; } S. Kramm (IUT Rouen) Cours 2 2016-2017 30 / 37

Instanciation d une classe L utilisation de l objet se fait via les méthodes de la classe. #include "voiture.h" int main() { VOITURE v1; v1.set_vmax( 200 ); v1.demarre();... v1.arrete(); cout << "vitesse max ="; cout << v1.get_vmax() << endl; } S. Kramm (IUT Rouen) Cours 2 2016-2017 31 / 37

Agrégation d objets La déclaration d une classe peut inclure d autres objets : // voiture.h #include "moteur.h" class VOITURE { private: MOTEUR mot; int couleur;... public: void demarre();... }; S. Kramm (IUT Rouen) Cours 2 2016-2017 32 / 37

Agrégation d objets La déclaration d une classe peut inclure d autres objets : // voiture.h #include "moteur.h" class VOITURE { private: MOTEUR mot; int couleur;... public: void demarre();... }; Dans la définition des méthodes, on pourra accéder aux méthodes publiques de l objet inclus : // voiture.cpp #include "voiture.h" void VOITURE::demarre() { mot.verifier_huile(); mot.demarrer();... } S. Kramm (IUT Rouen) Cours 2 2016-2017 32 / 37

Sous-sommaire 1 Introduction 2 C++ = C amélioré 3 Programmation Orientée Objet avec C++ Structures de données en C Le mot-clé class Utilisation de classes A suivre... S. Kramm (IUT Rouen) Cours 2 2016-2017 33 / 37

Surdéfinition d opérateurs Les classes permettent de créer de véritables nouveaux types de données, en modifiant le sens des opérateurs classiques Exemple : soit un type de donnée nombre complexe, composé de deux nombres a et b (réel + imaginaire) S. Kramm (IUT Rouen) Cours 2 2016-2017 34 / 37

Surdéfinition d opérateurs Les classes permettent de créer de véritables nouveaux types de données, en modifiant le sens des opérateurs classiques Exemple : soit un type de donnée nombre complexe, composé de deux nombres a et b (réel + imaginaire) En C, on pourra définir une structure regroupant les deux valeurs : typedef struct cplxe { float a, b; } COMPLEXE; S. Kramm (IUT Rouen) Cours 2 2016-2017 34 / 37

Surdéfinition d opérateurs Les classes permettent de créer de véritables nouveaux types de données, en modifiant le sens des opérateurs classiques Exemple : soit un type de donnée nombre complexe, composé de deux nombres a et b (réel + imaginaire) En C, on pourra définir une structure regroupant les deux valeurs : typedef struct cplxe { float a, b; } COMPLEXE; Mais en C, pour additionner deux complexes, il faudra faire l addition champ par champ : COMPLEXE n1, n2, n3;... n3.a = n1.a + n2.a; n3.b = n1.b + n2.b; S. Kramm (IUT Rouen) Cours 2 2016-2017 34 / 37

Surdéfinition d opérateurs Les classes permettent de créer de véritables nouveaux types de données, en modifiant le sens des opérateurs classiques Exemple : soit un type de donnée nombre complexe, composé de deux nombres a et b (réel + imaginaire) En C, on pourra définir une structure regroupant les deux valeurs : typedef struct cplxe { float a, b; } COMPLEXE; Mais en C, pour additionner deux complexes, il faudra faire l addition champ par champ : COMPLEXE n1, n2, n3;... n3.a = n1.a + n2.a; n3.b = n1.b + n2.b; Le C++ permettra de définir le sens de l opérateur + (ou - ) au sein de la classe, et on pourra écrire de façon plus intuitive : COMPLEXE n1, n2, n3;... n3 = n1 + n2; S. Kramm (IUT Rouen) Cours 2 2016-2017 34 / 37

Initialisations automatique En C, la création d une variable n entraîne aucune exécution de code : la variable est laissée dans un état indéterminé. S. Kramm (IUT Rouen) Cours 2 2016-2017 35 / 37

Initialisations automatique En C, la création d une variable n entraîne aucune exécution de code : la variable est laissée dans un état indéterminé. En C++, on pourra avoir une initialisation automatique des variables, grace à une méthode particulière, appelée constructeur. Cette méthode est exécutée automatiquement (de façon transparente) à chaque création d un objet de ce type. COMPLEXE n1; // initialisé automatiquement à 0 + 0i S. Kramm (IUT Rouen) Cours 2 2016-2017 35 / 37

Initialisations automatique En C, la création d une variable n entraîne aucune exécution de code : la variable est laissée dans un état indéterminé. En C++, on pourra avoir une initialisation automatique des variables, grace à une méthode particulière, appelée constructeur. Cette méthode est exécutée automatiquement (de façon transparente) à chaque création d un objet de ce type. COMPLEXE n1; // initialisé automatiquement à 0 + 0i On pourra aussi passer des arguments au constructeur, pour initialiser l objet à une valeur donnée : COMPLEXE n1( 3, 2 ); // n1 = 3 + 2i (Voir cours suivant...) S. Kramm (IUT Rouen) Cours 2 2016-2017 35 / 37

Pour aller plus loin... http://fr.wikipedia.org/wiki/programmation_orientée_objet http://fr.wikipedia.org/wiki/c++ http://www.siteduzero.com => Langage C++ S. Kramm (IUT Rouen) Cours 2 2016-2017 36 / 37

Exercice : classe RECTANGLE Ecrire une classe RECTANGLE qui modélise un rectangle par sa hauteur et sa largeur, et qui offre les fonctions suivantes : calcul du périmètre : méthode float Perim() calcul de la surface : méthode float Surface() affichage : méthode void Affiche() ainsi que les accesseurs et mutateurs triviaux (lecture et modification de la largeur et de la hauteur). S. Kramm (IUT Rouen) Cours 2 2016-2017 37 / 37