You are on page 1of 31

C++ COURS N 2 :

CLASSES, DONNES ET FONCTIONS MEMBRES

Classes et objets en C++


Membres

d'une classe
Spcification d'une classe
Codage du comportement des objets d'une
classe
Utilisation d'une classe
Droit d'accs aux membres d'une classe

Fonctions membres
notions

de constructeur/destructeur
fonctions membres en ligne
auto-rfrence
fonctions constantes
H. Afli, M1 C++, Universit du Maine, 2012-2013

NOTION DE CLASSE
1/ Classe et type
gnralisation de la notion de TYPE
utilisateur
regrouper les donnes et le comportement
autoriser l'encapsulation des donnes
spcifier et raliser des TDA

2/ Classe et POO
outil de conception et de programmation
modliser le rel, abstraction
organiser le code (modularit)
factoriser ou rutiliser le code (hritage)

CLASSE ET OBJETS

une classe dcrit un ensemble d'objets ayant


mmes proprits
mme
en

C++ : les donnes membres

mme
en

structure
comportement

C++ : les fonctions membres

un lment d'un tel ensemble est appel


une

instance de la classe ou
un reprsentant 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
un Entier

732
un CompteEnBanque

unePersonne
nom .
adresse .
-------------........
........

numro .
titulaire .
solde .

--------------------donneTonSolde
dpose(uneSomme)
retire(uneSomme)
afficheToi

une Chaine
1
2
3
------------afficheToi

une Chaine

Rseau des objets

L
un Caractre

un Caractre

un Rel
2025.54

un Caractre

CLASSES/INSTANCES : EXEMPLE
Classe Compte
objet abstrait
(classe)

structure

numro
solde
titulaire

objets concrets
(instances de la classe)

numro 8765
solde 5000
titulaire Jean

unCompte

comportement

donneTonSolde
dpose
retire
afficheToi

.
numro
2345
solde
-3milliards
titulaire Tapie

unAutreCompte

CLASSES/INSTANCES
tout objet est instance d'une classe
la classe spcifie la structure de l'objet
et son comportement

le

nom des variables d'tat (les champs)

C++

: donnes membres

le

texte des procdures dfinissant le


comportement
C++

: fonctions membres

l'objet spcifie les valeurs des


variables d'tat (les attributs, le
contenu des champs)

PROGRAMMATION OBJETS
3 moments
spcification d'une classe
tape de modlisation
point de vue du concepteur de la classe
C++ : dclaration de la classe dans un fichier. h

codage des mthodes d'une classe


tape de ralisation
point de vue du programmeur de la classe
C++ : dfinition des mthodes de la classe

utilisation d'une classe


tape de cration d'instances de la classe et leur
activation
point de vue de l'utilisateur de la classe, du client

SPCIFICATION D'UNE CLASSE


(DCLARATION)

dclaration de toutes les


fonctions

membres (public ou private)


donnes membres (gnralement : private)

interface de la classe :
la

partie publique de la dclaration d'une


classe
une classe passe un contrat avec les autres
classes :
elle

s'engage fournir tous les services publis


dans son interface

EN PRATIQUE
par dfaut : un membre est priv
en gnral on place les dclarations

de

classe dans un fichier d'en-tte (.h)


des membre publiques de la classe : au dbut
de la dclaration de la classe
des membres privs de la classe : la fin
(et prfixes 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
spcification d'une classe
codage des mthodes d'une classe
tape

de ralisation
point de vue du programmeur de la classe
C++ : dfinition des mthodes de la classe

utilisation d'une classe

CODAGE DES FONCTIONS MEMBRES D'UNE


CLASSE (DFINITION)
dfinir les fonctions membres gnralement

l'extrieur de la dfinition de la classe

dans un fichier .cpp

prfixer le nom de la fonction membre par


le nom de la classe suivi de l'oprateur de
porte ::

NOM DES MEMBRES D'UNE CLASSE


au sein de la dfinition d'une fonction
membre,

les donnes membres de l'objet receveur


du message sont accessibles par leur nom
(sans rfrence explicite l'objet receveur
du message)

les fonctions membres de la classe de


l'objet receveur sont accessibles
sans utiliser le nom de la classe et
l'oprateur de porte

PROGRAMMATION OBJETS
3 moments
spcification d'une classe
codage des mthodes d'une classe
utilisation d'une classe
tape

de cration d'instances de la classe et


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

CRATION D'INSTANCES ET ANIMATION DU


MODLE
la fonction cliente (utilisatrice) de la classe
cre des instances de la classe :

en C++ en dclarant une variable de type le nom de la


classe

initialise l'tat de ces instances (la valeur des


donnes membres)
dans ex1 : appel la fonction membre initialiser
en C++ : automatiquement par appel un constructeur
de la classe (Cf. ex 2)

envoie des messages aux instances cres et


initialises pour
modifier leur tat
obtenir des informations
les faire agir

INVERSION PAR RAPPORT AU C : UN EXEMPLE

en C
une

pile est dfinie comme une structure :

le

contenu de la pile (tableau/liste)


le sommet de la pile (index ou ptr)
ensuite

on dfinit des fonctions pour manipuler cette


structure (initialiser, empiler, dpiler, sommet)

en C++ : la classe Pile est dfinie comme tant la


fois
une

structure (contenu, sommet)


un comportement (initialiser, empiler...)
Les fonctions membres
appartiennent

au type pile,
sont invoques en envoyant un message un objet de type
pile

CLASSE ET ACCS AUX MEMBRES


une classe permet de raliser
un type utilisateur encapsulant les donnes
gnralement en POO
les donnes (prives) ne sont accessibles de
l'extrieur de l'objet que par les mthodes de la
classe (publiques)
en C++ donne (resp. fonction) membre

publique

:
peut tre accde (resp. invoque)
dans n'importe quelle fonction
prive :
peut tre accde (resp. invoque)
dans des fonctions membres (ou amies) de la classe o
elle est dclare

PLAN

Classes et objets en C++


Spcification d'une classe
Codage du comportement des objets d'une classe
Utilisation d'une classe
Inversion par rapport au C : un exemple
Accs membres d'une classe

Complments sur les fonctions membres


notions de constructeur/destructeur
fonctions membres en ligne
auto-rfrence
fonctions constantes

CONSTRUCTEURS ET DESTRUCTEURS
(PRINCIPE)
type utilisateur sr ncessite
allocation et initialisation de mmoire
garanties
constructeurs et destructeur permettent

au

concepteur : d'orchestrer

initialisation

et allocation (en dfinissant un ou


plusieurs constructeur(s))
libration (en dfinissant un destructeur)

l'utilisateur de ne pas s'en proccuper :

le

compilateur gnre automatiquement des appels


aux constructeurs et au destructeur pour initialiser
ou dtruire des variables appartenant une classe
quand elles doivent l'tre

CONSTRUCTEURS ET DESTRUCTEURS (EN


C++)

constructeurs
fonctions membres publiques (en gnral)
identificateur : nom de la classe
aucun type de retour (pas mme void)
appel automatiquement chaque cration
d'objet

destructeur
fonction membre publique
identificateur : nom de la classe prcd de tilde ~
ni argument ni de valeur de retour
appel automatiquement chaque destruction
d'objet

INVOCATION AUTOMATIQUE

dans tous les cas o l'on dfinit un objet de la


classe
le compilateur gnre automatiquement un
appel au constructeur
lors de la dclaration d'un objet non externe
lors de la cration d'un objet automatique (pile)
quand un objet est cr dynamiquement (tas)
(new appelle automatiquement un constructeur)

le destructeur est appel automatiquement


avant la libration de la mmoire alloue
l'objet
pour les objets automatiques : la sortie du bloc ou
de la fonction
pour les objets dynamiques (cr par new) : lorsque
l'oprateur delete est invoqu, il appelle le
destructeur

RLES DU CONSTRUCTEUR EXPLICITE


1/ initialisation des donnes membres avec des
valeurs passes en argument au constructeur
au choix :
dans le corps du constructeur
par la liste d'initialisation

2/ allocation dynamique de mmoire pour des


donnes membres
(cas o les donnes membres sont
dynamiques)
3/ construction des objets membres
(cas o les donnes membres sont d'un type
utilisateur class )

PROPRITS DES CONSTRUCTEURS

comme toutes les fonctions membres, les


constructeurs peuvent
tre

surchargs

pour autoriser plusieurs faons d'initialiser un objet

possder
pour

des arguments par dfaut

viter la prolifration des constructeurs

les constructeurs sont des fonctions membres


spciales invoques
automatiquement

par le compilateur
pas en envoyant un message l'objet

CONSTRUCTEURS PAR DFAUT

constructeur par dfaut :


constructeur sans argument

partir du moment o une classe a dfini un


constructeur,
il n'est plus possible de crer un objet sans
fournir les arguments requis par son constructeur
explicite
(sauf si la classe a dfini un constructeur sans
argument)

DESTRUCTEUR
rle :
libre la mmoire alloue pour l'objet
rgle :

quand on dfinit un constructeur qui alloue de la


mmoire dynamique dans le tas pour les donnes
membres
dfinir un destructeur pour librer ces
emplacements dans le tas

plus gnralement

la responsabilit d'un destructeur est de dtruire


les ressources alloues lors de la dure de vie
d'un objet
(pas uniquement lors de sa construction, un objet
peut adopter un pointeur)

PLAN

Classes et objets en C++


Spcification d'une classe
Codage du comportement des objets d'une classe
Utilisation d'une classe
Inversion par rapport au C : un exemple
Accs membres d'une classe

Complments sur les fonctions membres


notions de constructeur/destructeur
fonctions membres en ligne
auto-rfrence
fonctions constantes

FONCTIONS MEMBRES EN LIGNE (DVELOPPABLES,


"INLINE")
Deux faons de dfinir des fonctions membres en
ligne :

criture 1 :
la dfinition de la fonction membre (pas seulement
sa dclaration) est l'intrieur de la dfinition de la
classe

criture 2 :
la dfinition de la fonction membre est extrieure
la dclaration de la classe mais est prcde du
mot cl inline
dans ce cas
la dfinition doit figurer aussi dans le fichier d'entte

FONCTIONS MEMBRES EN LIGNE (2)

criture 1 :
plus

rapide (en cours, TD)


confusion spcification (dclaration) et
ralisation (dfinition)

criture 2 :
plus

long crire
permet de sparer l'interface d'une classe de
sa ralisation
conseil : on place les fct en ligne
soit

la fin du fichier d'en-tte


soit dans un autre fichier d'en-tte qui est inclus
la fin du fichier de dclaration de la classe

UTILISATION DES FONCTIONS INLINE


(ref : Meyers p. 128-132)
Limiter les dclarations inline aux fonctions
membres vraiment triviales
Tenir compte des avertissements du
compilateur qui refuse de dvelopper une
fonction
Utiliser la rgle de 80-20 : utilisez la directive
inline pour les 20 % du code sur lesquels le
programme passe les 80 % de son temps.
Dfinir inline
gnralement les constructeurs
souvent les destructeurs

AUTO-RFRENCE (THIS)
le mot-cl "this"
dans la dfinition d'une fonction membre
reprsente 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 accder 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


donnes membres de l'objet qui l'invoque (garanti
par 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 invoques sur des objets constants
une fonction dclare constante doit tre dfinie
constante et rciproquement

on peut surcharger une fonction membre constant par


une fonction membre non constante et rciproquement

distinguer :
fonction constante
fonction dont un argument est constant

AUTOVALUATION

You might also like