UE Programmation C++ 2ème cours. B. Gas. Orientation I3SR en apprentissage.

Documents pareils
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

Programmation par les Objets en Java

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

Chapitre 2. Classes et objets

Généralités sur le Langage Java et éléments syntaxiques.

et Programmation Objet

Mysql. Les requêtes préparées Prepared statements

JAVA TD0. Prise en main du langage Environnement de base JAVA 1

Programmation en Java IUT GEII (MC-II1) 1

Cours 1: Java et les objets

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

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

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

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

Java Licence Professionnelle CISII,

La sauvegarde (backup) de votre comptabilité a pour but de vous permettre de retrouver vos données si un incident est survenu.

Cours Informatique Master STEP

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Java c est quoi? Java pourquoi?

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

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

Premiers Pas en Programmation Objet : les Classes et les Objets

I. Introduction aux fonctions : les fonctions standards

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

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

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

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

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

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

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

Pluridisciplinarité. Classe de BTS DATR

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

Java DataBaseConnectivity

Héritage presque multiple en Java (1/2)

Plan Pédagogique du cours

.NET - Classe de Log

Projet gestion d'objets dupliqués

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

GUIDE PRATIQUE déplacements professionnels temporaires en France et à l étranger

Chapitre 5 : Les procédures stockées PL/SQL

TP1. Outils Java Eléments de correction

4. Groupement d objets

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

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

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

La technologie Java Card TM

Initiation à JAVA et à la programmation objet.

Projet de Veille Technologique

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

RMI le langage Java XII-1 JMF

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

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

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

Une introduction à Java

Création d objet imbriqué sous PowerShell.

Bernard HAMM, Évelyne LAVOISIER

Présentation Générale

Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle P. Bonnet

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

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

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

Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code

Chapitre 1 : Introduction aux bases de données

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

Exercices INF5171 : série #3 (Automne 2012)

Programmation Orientée Objet en C#

Chapitre 1 : La gestion dynamique de la mémoire

STAGE IREM 0- Premiers pas en Python

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

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

Chapitre VI- La validation de la composition.

les Formulaires / Sous-Formulaires Présentation Créer un formulaire à partir d une table...3

Algorithmique avec Algobox

Le prototype de la fonction main()

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

Installation FollowMe Q server

Le stockage local de données en HTML5

Perl Console. Votre compagnon pour développer en Perl. Les Journées du Perl , 17 novembre, Lyon. Alexis Sukrieh

Introduction à C++ et à wxwidgets

LES ACCES ODBC AVEC LE SYSTEME SAS

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

Programmation par composants (1/3) Programmation par composants (2/3)

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

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

Programme Compte bancaire (code)

Programmation. fonctionnelle, impérative, logique et orientée objet

as Architecture des Systèmes d Information

TP1 : Initiation à Java et Eclipse

Utilisation d objets : String et ArrayList

Contre exemple de présentation

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

THEGREENBOW FIREWALL DISTRIBUE TGB::BOB! Pro. Spécifications techniques

Traduction des Langages : Le Compilateur Micro Java

Programmation MacOSX / ios

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

Le langage C. Introduction, guide de reference

Java 1.5 : principales nouveautés

Cours d Algorithmique et de Langage C v 3.0

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

Transcription:

2ème cours B. Gas

Les classes: définition Un objet est constitué d'un ensemble de données de type quelconque et d'un ensemble de fonctions permettant de manipuler ces données. La définition d'un type d'objet s'appelle une classe. Les classes représentent le principal mécanisme par lequel il devient possible de définir de nouveaux types de données en C++, donc d'étendre les types de base fournis par le langage. Du point de vue de la syntaxe, la définition d'une classe ressemble beaucoup à celle d'une structure à ceci près que le mot réservé class remplace le mot struct. Certains champs ne sont pas des données mais des fonctions.

Les classes: encapsulation Dans cet exemple, la classe est séparée en deux parties : l'une qui contient les données (x et y) et qui est déclarée private L autre qui contient des fonctions et qui est déclarée public : class Complex { private : double x, y; public : void init( double a, double b ) { x = a; y = b; // attributs // méthode void afficher() { cout << x << " + i*" << y; ; void main() { Complex c; c.init( 2., 2. ); c.afficher(); // accès aux données par les méthodes

Les classes: accès aux membres Avec une classe définie ainsi : class Complex { private : double x, y; public : void set_x ( double _x) { x = _x; ; // accesseurs... void set_y ( double _y) { x = _y; ; double get_x() const { return x;; // méthode constante double get_y() const { return y;; //... void main() { Complex c; c.x = 2.; // erreur à la compilation c.y = 2.; // erreur à la compilation c.set_x( 2. ); // OK cout << "partie réelle = " << c.get_x() << endl; Accès par pointeurs : Complex *pc; pc = new Complex; pc->set_x( 2.0 );

Les classes: le pointeur this Avec une classe définie ainsi : class Complex { private : double x, y; public : void set_x ( double x) { this->x = x; ; void set_y ( double y) { (*this).y = y; ; double get_x() const { return x;; double get_y() const { return y;; void afficher() { cout << this->x << " + i*" << this->y; // differentiation des attributs et paramètres Rien ne change : void main() { Complex c; c.x = 2.; c.y = 2.; // erreur à la compilation // erreur à la compilation // OK c.set_x( 2. ); cout << "partie réelle = " << c.get_x() << endl; c.afficher();

Les classes: accès par références Avec une classe définie ainsi : class Complex { private : double x, y; public : // void set_x ( double x) { this->x = x; ; // méthode inutile // void set_y ( double y) { (*this).y = y; ; // méthode inutile double &get_x() { return x;; // accès en écriture double &get_y() { return y;; double get_x() const { return x;; // accès en lecture double get_y() const { return y;; Rien ne change : void main() { Complex c; c.get_x() = 2.; // affectation cout << "partie réelle = " << c.get_x() << endl; // lecture

Constructeur d une classe Le constructeur d'une classe désigne une fonction membre particulière qui a pour rôle d'initialiser l'objet (typiquement donner des valeurs à ses attributs). La mémoire est déjà allouée pour l'objet. Le constructeur d'une classe à le même nom que la classe, n'a pas de type de retour et ne retourne aucune valeur (pas d'instruction return dans le corps d'un constructeur. class Complex { private : double x, y; public : Complex( double a, double b ) { x = a; y = b; void afficher() { cout << x << " + i*" << y; ; Le constructeur initialise les deux attributs x et y de la classe Complex.

Constructeur d une classe Un constructeur est toujours appelé implicitement (lorsqu'un objet est créé) ou explicitement. Il peut être surchargé lorsque l'on veut mettre plusieurs signatures à la disposition de l'utilisateur. Exemple : class Complex { private : double x, y; public : Complex( double a, double b ) { x = a; y = b; Complex( double a ) { x = a; y = 0.; Complex( ) { x = 0.; y = 0.; ; En utilisant des paramètres par défaut les constructeurs peuvent être regroupés : class Complex { private : double x, y; public : Complex( double a=0., double b=0. ) { x = a; y = b; ;

Appel des constructeurs Les appels explicites des constructeurs peuvent se faire de trois façons différentes : Complex c( 2., 2. ); Complex d = Complex( 2., 2. ); // Attention à ne pas confondre initialisation et affectation Complex e = 2.; // seulement dans le cas d'un constructeur à un seul paramètre La dernière ligne est équivalente à : Complex e = Complex( 2 ); Lors d'une création dynamique on écrira : Complex *pc; Complex pc = new Complex( 2., 2. ); Les constructeurs sont aussi appelés lors de la création d'objets temporaires. Dans l'exemple cidessous le constructeur est appelé une fois : cout << Complex( 2., 2. ) << endl;

Le constructeur par défaut Ce constructeur est utilisé sans paramètres: soit il n'a pas de paramètres, soit ils sont initialisés par défaut. Il est appelé à chaque fois qu'un objet est créé sans appel explicite au constructeur de la classe : Complex c; Complex d[20]; Complex *pc = new Complex(); Le travail du compilateur : Lorsqu'aucun constructeur par défaut n'est défini dans une classe, le compilateur génère un constructeur par défaut dont la caractéristique est de ne rien faire, hormis appeler les constructeurs par défaut de chacun des objets déclarés dans la classe. Lorsqu'un constructeur par défaut est défini, le compilateur n'en génère pas un lui-même. Ainsi, l'appel des constructeurs par défaut des attributs de la classe doit être pris en charge explicitement par le constructeur par défaut de l'utilisateur.

Le constructeur par copie (clonage) Le constructeur par copie est celui qui procède à l'initialisation d'un objet par copie d'un autre objet. Sa déclaration prend la forme suivante (une référence sur un objet de même classe et éventuellement une succession de paramètres initialisés par défaut) : Complex( Complex &c, type val1=..., type val2=... ); ou : Complex( const Complex &c, type val1=..., type val2=... ); Exemple : class Complex { private : double x, y; public : Complex( double a=0., double b=0. ) { x = a; y = b; Complex( const Complex &c ) { x = c.x; y = c.y; ; Le constructeur par copie est appelé dans l'initialisation suivante : Complex C = Complex( 2., 2. ); S'il n'a pas été défini, le compilateur en synthétise un par défaut qui se contente de recopier les attributs d'un objet dans l'autre. Il est également appelé lors du passage d'objets par valeur aux fonctions.

Le constructeur par copie (clonage) Lorsqu'une classe dispose d'attributs pointeurs, le constructeur par copie généré par le compilateur peut poser problème car les adresses sont copiées, conduisant au partage de données par plusieurs objets.

Construction des attributs Lorsqu'une classe contient des objets, il convient de les construire correctement lors de la construction de la classe. Lorsque les objets membres n'ont pas de constructeur par défaut, il est possible de les initialiser en utilisant la syntaxe suivante : Complex::Complex( double xx, double yy ) : x (xx), y(yy) {...;...; ;

Constructeur de conversion Il s'agit d'un constructeur appelé avec un seul argument et dont le type de l'argument est celui d'un objet d'une autre classe.

Destructeurs

Exercices