cours_2

31
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 des objets d'une classe Utilisation d'une classe Droit d'accès aux membres d'une classe Fonctions membres notions de constructeur/destructeur fonctions membres en ligne auto-référence fonctions constantes H. Afli, M1 C++, Université du Maine, 2012-2013

Upload: toufikjalaleddine

Post on 12-Jul-2016

212 views

Category:

Documents


0 download

DESCRIPTION

best cours

TRANSCRIPT

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 des objets d'uneclasse

Utilisation d'une classe

Droit d'accès aux membres d'une classe

Fonctions membres notions de constructeur/destructeur

fonctions membres en ligne

auto-référence

fonctions constantesH. Afli, M1 C++, Université du Maine, 2012-2013

NOTION DE CLASSE

1/ Classe et typegénéralisation de la notion de TYPE utilisateur regrouper les données et le comportement autoriser l'encapsulation des données spécifier et réaliser des TDA

2/ Classe et POOoutil de conception et de programmation modéliser le réel, abstraction organiser le code (modularité) factoriser ou réutiliser le code (héritage)

CLASSE ET OBJETS

une classe décrit un ensemble d'objets ayant mêmes propriétés

même structureen C++ : les données membres

même comportementen C++ : les fonctions membres

un élément d'un tel ensemble est appelé

une instance de la classe ou

un représentant de la classe ou

un objet de la classe ou

en C++ : une variable dont le type est le nom de la classe

OBJETS INFORMATIQUES

Réseau des objets

nom .

adresse .

--------------

........

........

numéro .titulaire .

solde .

---------------------donneTonSolde

dépose(uneSomme)retire(uneSomme)

afficheToi

1 •

2 •

3 •-------------

afficheToi

2025.54

une Chaineun CompteEnBanque

un Réel

un Caractère

L

é

o

un Caractère

un Caractère

une Chaine

732

un Entier

unePersonne

CLASSES/INSTANCES : EXEMPLE

numéro 8765 solde 5000titulaire Jean

.numéro 2345solde -3milliardstitulaire Tapie

Classe Compte

structure

numéro

solde

titulaire

comportement

donneTonSolde

dépose

retire

afficheToi

objet abstrait

(classe)

objets concrets

(instances de la classe)

unCompte unAutreCompte

CLASSES/INSTANCES

tout objet est instance d'une classe

la classe spécifie la structure de l'objet et son comportement

le nom des variables d'état (les champs)C++ : données membres

le texte des procédures définissant le comportementC++ : fonctions membres

l'objet spécifie les valeurs des variables d'état (les attributs, le contenu des champs)

PROGRAMMATION OBJETS

3 moments

spécification d'une classe étape de modélisation

point de vue du concepteur de la classe

C++ : déclaration de la classe dans un fichier. h

codage des méthodes d'une classe étape de réalisation

point de vue du programmeur de la classe

C++ : définition des méthodes de la classe

utilisation d'une classe étape de création d'instances de la classe et leur

activation

point de vue de l'utilisateur de la classe, du client

SPÉCIFICATION D'UNE CLASSE (DÉCLARATION)

déclaration de toutes les

fonctions membres (public ou private)

données membres (généralement : private)

interface de la classe :

la partie publique de la déclaration d'une classe

une classe passe un contrat avec les autres classes :elle s'engage à fournir tous les services publiés

dans son interface

EN PRATIQUE

par défaut : un membre est privé

en général on place les déclarations de classe dans un fichier d'en-tête (.h)

des membre publiques de la classe : au début de la déclaration de la classe

des membres privés de la classe : à la fin (et préfixées par un soulignement)

Remarque : ceci est un style de programmation

il est conseillé de l'utiliser

mais ce n'est pas obligatoire

PROGRAMMATION OBJETS

3 moments

spécification d'une classe

codage des méthodes d'une classe

étape de réalisation

point de vue du programmeur de la classe

C++ : définition des méthodes de la classe

utilisation d'une classe

CODAGE DES FONCTIONS MEMBRES D'UNE CLASSE (DÉFINITION)

définir les fonctions membres généralement

à l'extérieur de la définition de la classe

dans un fichier .cpp

préfixer le nom de la fonction membre par le nom de la classe suivi de l'opérateur de portée ::

NOM DES MEMBRES D'UNE CLASSE

au sein de la définition d'une fonctionmembre,

les données membres de l'objet receveurdu message sont accessibles par leur nom (sans référence explicite à l'objet receveurdu message)

les fonctions membres de la classe de l'objet receveur sont accessiblessans utiliser le nom de la classe et l'opérateur de portée

PROGRAMMATION OBJETS

3 moments

spécification d'une classe

codage des méthodes d'une classe

utilisation d'une classe

étape de création d'instances de la classe et leur activation

point de vue de l'utilisateur de la classe, du client

CRÉATION D'INSTANCES ET ANIMATION DU MODÈLE

la fonction cliente (utilisatrice) de la classe

crée des instances de la classe : en C++ en déclarant une variable de type le nom de la

classe

initialise l'état de ces instances (la valeur des données membres) dans ex1 : appel à la fonction membre initialiser

en C++ : automatiquement par appel à un constructeurde la classe (Cf. ex 2)

envoie des messages aux instances créées et initialisées pour modifier leur état

obtenir des informations

les faire agir

INVERSION PAR RAPPORT AU C : UN EXEMPLE

en C une pile est définie comme une structure :

le contenu de la pile (tableau/liste)

le sommet de la pile (index ou ptr)

ensuite on définit des fonctions pour manipuler cettestructure (initialiser, empiler, dépiler, sommet)

en C++ : la classe Pile est définie comme étant à la fois une structure (contenu, sommet)

un comportement (initialiser, empiler...)

Les fonctions membresappartiennent au type pile,

sont invoquées en envoyant un message à un objet de type pile

CLASSE ET ACCÈS AUX MEMBRES

une classe permet de réaliserun type utilisateur encapsulant les données

généralement en POOles données (privées) ne sont accessibles de l'extérieur de l'objet que par les méthodes de la classe (publiques)

en C++ donnée (resp. fonction) membre publique :

peut être accédée (resp. invoquée) dans n'importe quelle fonction

privée :peut être accédée (resp. invoquée) dans des fonctions membres (ou amies) de la classe oùelle est déclarée

PLAN

Classes et objets en C++

Spécification d'une classe

Codage du comportement des objets d'une classe

Utilisation d'une classe

Inversion par rapport au C : un exemple

Accès membres d'une classe

Compléments sur les fonctions membres

notions de constructeur/destructeur

fonctions membres en ligne

auto-référence

fonctions constantes

CONSTRUCTEURS ET DESTRUCTEURS (PRINCIPE)

type utilisateur sûr nécessiteallocation et initialisation de mémoiregaranties

constructeurs et destructeur permettent au concepteur : d'orchestrer

initialisation et allocation (en définissant un ouplusieurs constructeur(s))

libération (en définissant un destructeur)

à l'utilisateur de ne pas s'en préoccuper : le compilateur génère automatiquement des appels

aux constructeurs et au destructeur pour initialiserou détruire des variables appartenant à une classequand elles doivent l'être

CONSTRUCTEURS ET DESTRUCTEURS (EN C++)

constructeurs fonctions membres publiques (en général)

identificateur : nom de la classe

aucun type de retour (pas même void)

appelé automatiquement à chaque création d'objet

destructeur fonction membre publique

identificateur : nom de la classe précédé de tilde ~

ni argument ni de valeur de retour

appelé automatiquement à chaque destruction d'objet

INVOCATION AUTOMATIQUE

dans tous les cas où l'on définit un objet de la classele compilateur génère automatiquement un appel au constructeur lors de la déclaration d'un objet non externe lors de la création d'un objet automatique (pile) quand un objet est créé dynamiquement (tas)

(new appelle automatiquement un constructeur)

le destructeur est appelé automatiquementavant la libération de la mémoire allouée à l'objet pour les objets automatiques : à la sortie du bloc ou

de la fonction pour les objets dynamiques (créé par new) : lorsque

l'opérateur delete est invoqué, il appelle le destructeur

RÔLES DU CONSTRUCTEUR EXPLICITE

1/ initialisation des données membres avec des valeurs passées en argument au constructeurau choix : dans le corps du constructeur par la liste d'initialisation

2/ allocation dynamique de mémoire pour des données membres (cas où les données membres sont dynamiques)

3/ construction des objets membres (cas où les données membres sont d'un type utilisateur class )

PROPRIÉTÉS DES CONSTRUCTEURS

comme toutes les fonctions membres, les constructeurs peuvent

être surchargés pour autoriser plusieurs façons d'initialiser un objet

posséder des arguments par défautpour éviter la prolifération des constructeurs

les constructeurs sont des fonctions membresspéciales invoquées

automatiquement par le compilateur

pas en envoyant un message à l'objet

CONSTRUCTEURS PAR DÉFAUT

constructeur par défaut :

constructeur sans argument

à partir du moment où une classe a défini un constructeur, il n'est plus possible de créer un objet sans fournir les arguments requis par son constructeur explicite(sauf si la classe a défini un constructeur sans argument)

DESTRUCTEUR

rôle : libère la mémoire allouée pour l'objet

règle : quand on définit un constructeur qui alloue de la

mémoire dynamique dans le tas pour les donnéesmembres

définir un destructeur pour libérer cesemplacements dans le tas

plus généralement la responsabilité d'un destructeur est de détruire

les ressources allouées lors de la durée de vie d'un objet (pas uniquement lors de sa construction, un objet peut adopter un pointeur)

PLAN

Classes et objets en C++

Spécification d'une classe

Codage du comportement des objets d'une classe

Utilisation d'une classe

Inversion par rapport au C : un exemple

Accès membres d'une classe

Compléments sur les fonctions membres

notions de constructeur/destructeur

fonctions membres en ligne

auto-référence

fonctions constantes

FONCTIONS MEMBRES EN LIGNE (DÉVELOPPABLES, "INLINE")

Deux façons de définir des fonctions membres en ligne :

écriture 1 :la définition de la fonction membre (pas seulementsa déclaration) est à l'intérieur de la définition de la classe

écriture 2 :la définition de la fonction membre est extérieure à la déclaration de la classe mais est précédée du mot clé inlinedans ce casla définition doit figurer aussi dans le fichier d'en-tête

FONCTIONS MEMBRES EN LIGNE (2)

écriture 1 : plus rapide (en cours, TD)

confusion spécification (déclaration) et réalisation (définition)

écriture 2 : plus long à écrire

permet de séparer l'interface d'une classe de sa réalisation

conseil : on place les fct en lignesoit à la fin du fichier d'en-tête

soit dans un autre fichier d'en-tête qui est inclus à la fin du fichier de déclaration de la classe

UTILISATION DES FONCTIONS INLINE

(ref : Meyers p. 128-132)

Limiter les déclarations inline aux fonctionsmembres vraiment triviales

Tenir compte des avertissements du compilateur qui refuse de développer unefonction

Utiliser la règle de 80-20 : utilisez la directive inline pour les 20 % du code sur lesquels le programme passe les 80 % de son temps.

Définir inline généralement les constructeurs

souvent les destructeurs

AUTO-RÉFÉRENCE (THIS)

le mot-clé "this" dans la définition d'une fonction membrereprésente un pointeur sur l'objet qui invoque la fonction membre

this est un pointeur constant (pseudo-variable) on peut le consulter, pas le modifier

l'objet pointé par this peut être modifié mais this ne peut l'être

utilisation de this inutile (ringard) : pour accéder aux membres d'une

classe

indispensable : pour écrire des fonctions membres qui manipulent des pointeurs

FONCTIONS MEMBRES CONSTANTES

une fonction membre constante ne modifie pas les données membres de l'objet qui l'invoque (garantipar le compilateur) dans une fonction constante this est un pointeur constant

(comme d'hab) mais sur un objet constant

seules les fonctions membres constantes peuventêtre invoquées sur des objets constants

une fonction déclarée constante doit être définieconstante et réciproquement on peut surcharger une fonction membre constant par

une fonction membre non constante et réciproquement

distinguer : fonction constante fonction dont un argument est constant

AUTOÉVALUATION