Sunteți pe pagina 1din 80

POO C++

Y. Morre
Introduction
La POO
Les secret de string

C++ et Programmation Oriente Objet :


Objets, classes et surcharge

Les classes
Crer une classe
Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Constructeur /
Destructeur

Yann Morre

Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

www.lcoms.univ-lorraine.fr, www.morere.eu

Surcharge
doprateurs

Septembre 2013

Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

1 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

La Programmation Orient Objet


POO C++

Quest ce quun objet

Y. Morre

Une variable ? une fonction ? : NON

Introduction
La POO
Les secret de string

Les classes
Crer une classe
Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes

Nouvel lment compos de plusieurs variables et fonctions


un objet est une structure de donnes values et caches qui
rpond un ensemble de messages/mthodes
Les donnes/variables qui dcrivent sa structure interne sont
appeles ses attributs ;
Lensemble des messages forme ce que lon appelle linterface de
lobjet. La rponse la rception dun message par un objet est
appele une mthode.

Interaction entre
classes

encapsulation

Surcharge
doprateurs

Certains attributs et/ou mthodes sont cachs : cest le principe


dencapsulation.

Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

2 / 59

modification de la structure interne des objets ou leurs mthodes


associes sans impact sur les utilisateurs de lobjet.
C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

La Programmation Orient Objet


POO C++

Quest ce quun objet

Y. Morre

Une variable ? une fonction ? : NON

Introduction
La POO
Les secret de string

Les classes
Crer une classe
Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes

Nouvel lment compos de plusieurs variables et fonctions


un objet est une structure de donnes values et caches qui
rpond un ensemble de messages/mthodes
Les donnes/variables qui dcrivent sa structure interne sont
appeles ses attributs ;
Lensemble des messages forme ce que lon appelle linterface de
lobjet. La rponse la rception dun message par un objet est
appele une mthode.

Interaction entre
classes

encapsulation

Surcharge
doprateurs

Certains attributs et/ou mthodes sont cachs : cest le principe


dencapsulation.

Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

2 / 59

modification de la structure interne des objets ou leurs mthodes


associes sans impact sur les utilisateurs de lobjet.
C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Les secrets de string


POO C++

Code source

Y. Morre
Introduction
La POO
Les secret de string

Les classes
Crer une classe
Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Constructeur /
Destructeur

# include < iostream >


# include < string > // O b l i g a t o i r e pour pouvoir u t i l i s e r les objets string
using n a m e s p a c e std ;
int main () {
string chaine1 ( " Bonjour ! " );
string chaine2 ( " Comment allez - vous ? " );
string chaine3 ;
chaine3 = chaine3 = chaine1 + " " + chaine2 ; // Concat nation
cout << chaine3 << endl ;
if ( chaine1 == chaine2 ) // Faux
cout << " Les chaines sont identiques . " << endl ;
else
cout << " Les chaines sont differentes . " << endl ;
return 0;
}

Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Vous avez dj utilis des objets

Surcharge
doprateurs

type string qui facilite lutilisation des chanes de caractres ;

Introduction

Plus besoin de dclarer des tableaux statiques de caractres :


char maChaine[100]; ;

Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux

concatnation de chane simplifie laide de loprateur + ;

Surcharge
doprateurs de
comparaisons

comparaison de chane simplifie laide de loprateur == ;

Bibliographie /

3 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Les secrets de string


POO C++

Code source

Y. Morre
Introduction
La POO
Les secret de string

Les classes
Crer une classe
Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Constructeur /
Destructeur

# include < iostream >


# include < string > // O b l i g a t o i r e pour pouvoir u t i l i s e r les objets string
using n a m e s p a c e std ;
int main () {
string chaine1 ( " Bonjour ! " );
string chaine2 ( " Comment allez - vous ? " );
string chaine3 ;
chaine3 = chaine3 = chaine1 + " " + chaine2 ; // Concat nation
cout << chaine3 << endl ;
if ( chaine1 == chaine2 ) // Faux
cout << " Les chaines sont identiques . " << endl ;
else
cout << " Les chaines sont differentes . " << endl ;
return 0;
}

Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Vous avez dj utilis des objets

Surcharge
doprateurs

type string qui facilite lutilisation des chanes de caractres ;

Introduction

Plus besoin de dclarer des tableaux statiques de caractres :


char maChaine[100]; ;

Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux

concatnation de chane simplifie laide de loprateur + ;

Surcharge
doprateurs de
comparaisons

comparaison de chane simplifie laide de loprateur == ;

Bibliographie /

3 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Oprations sur les string


POO C++

Mthodes de lobjet

Y. Morre

Le type string dispose de nombreuses mthodes

Introduction

http://www.cplusplus.com/reference/string/string/

La POO
Les secret de string

Appel de la mthode : objet.methode()

Les classes
Crer une classe
Droits daccs en
encapsulation

La taille du string ;-)

Sparation
prototypes et
dfinitions

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Surcharge
doprateurs
Introduction

# include < iostream >


# include < string >
// O b l i g a t o i r e pour pouvoir u t i l i s e r les objets string
using n a m e s p a c e std ;
int main (){
string maChaine ( " Bonjour ! " );
cout << " Longueur de la chaine : " << maChaine . size () << endl ;
return 0;
}

Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

4 / 59

Excution
$ ./objetStringSize
Longueur de la chaine : 9
C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Oprations sur les string


POO C++

Mthodes de lobjet

Y. Morre

Le type string dispose de nombreuses mthodes

Introduction

http://www.cplusplus.com/reference/string/string/

La POO
Les secret de string

Appel de la mthode : objet.methode()

Les classes
Crer une classe
Droits daccs en
encapsulation

La taille du string ;-)

Sparation
prototypes et
dfinitions

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Surcharge
doprateurs
Introduction

# include < iostream >


# include < string >
// O b l i g a t o i r e pour pouvoir u t i l i s e r les objets string
using n a m e s p a c e std ;
int main (){
string maChaine ( " Bonjour ! " );
cout << " Longueur de la chaine : " << maChaine . size () << endl ;
return 0;
}

Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

4 / 59

Excution
$ ./objetStringSize
Longueur de la chaine : 9
C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Oprations sur les string


POO C++

Dautres mthodes
La mthode erase() : supprime tout le contenu de la chane ;

Y. Morre
Introduction

La mthode substr() : extraire une partie de la chane.

La POO
Les secret de string

Les classes

Supprimmer/Extraire le contenu du string

Crer une classe


Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Surcharge
doprateurs

# include < iostream >


# include < string > // O b l i g a t o i r e pour pouvoir u t i l i s e r les objets string
using n a m e s p a c e std ;
int main (){
string chaine ( " Bonjour ! " );
chaine . erase ();
cout << " La chaine contient : " << chaine << endl ;
chaine = " Bonjour ! " ;
cout << chaine . substr (3) << endl ;
cout << chaine . substr (3 , 4) << endl ;
return 0;
}

Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

5 / 59

Excution
$ ./objetStringOtherMethod
La chane contient :
jour !
jour
C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Oprations sur les string


POO C++

Dautres mthodes
La mthode erase() : supprime tout le contenu de la chane ;

Y. Morre
Introduction

La mthode substr() : extraire une partie de la chane.

La POO
Les secret de string

Les classes

Supprimmer/Extraire le contenu du string

Crer une classe


Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Surcharge
doprateurs

# include < iostream >


# include < string > // O b l i g a t o i r e pour pouvoir u t i l i s e r les objets string
using n a m e s p a c e std ;
int main (){
string chaine ( " Bonjour ! " );
chaine . erase ();
cout << " La chaine contient : " << chaine << endl ;
chaine = " Bonjour ! " ;
cout << chaine . substr (3) << endl ;
cout << chaine . substr (3 , 4) << endl ;
return 0;
}

Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

5 / 59

Excution
$ ./objetStringOtherMethod
La chane contient :
jour !
jour
C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Crer une classe


POO C++

Classe, Objet : Niveau dabstraction

Y. Morre
Introduction
La POO
Les secret de string

La classe dcrit la structure interne des donnes, dfinit les


mthodes qui sappliqueront aux objets de mme famille (mme
classe) ou type ;

Les classes

Elle propose des mthodes de cration des objets ;

Crer une classe


Droits daccs en
encapsulation

Les objets sont dits alors instances de la classe ;

Sparation
prototypes et
dfinitions

Les attributs dun objet sont appels variables dinstance

Constructeur /
Destructeur

les messages sont nomms opration dinstance ou mthodes


dinstance.

Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Surcharge
doprateurs
Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

6 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Crer une classe


POO C++
Y. Morre
Introduction
La POO
Les secret de string

Les classes

Code minimal
Classe Personnage qui va reprsenter un personnage de jeu de rle
class Personnage
{

Crer une classe


Droits daccs en
encapsulation

}; // N oubliez pas le point - virgule la fin !

Sparation
prototypes et
dfinitions

Constructeur /
Destructeur

Syntaxe

Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Mot cl class suivi du nom choisi ;


Tout va tre dfinit entre les accolades.

Surcharge
doprateurs
Introduction

Attention
il y a un point-virgule aprs laccolade fermante

Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

7 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Crer une classe


POO C++
Y. Morre
Introduction
La POO
Les secret de string

Les classes

Code minimal
Classe Personnage qui va reprsenter un personnage de jeu de rle
class Personnage
{

Crer une classe


Droits daccs en
encapsulation

}; // N oubliez pas le point - virgule la fin !

Sparation
prototypes et
dfinitions

Constructeur /
Destructeur

Syntaxe

Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Mot cl class suivi du nom choisi ;


Tout va tre dfinit entre les accolades.

Surcharge
doprateurs
Introduction

Attention
il y a un point-virgule aprs laccolade fermante

Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

7 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Crer une classe


POO C++
Y. Morre
Introduction
La POO
Les secret de string

Les classes

Code minimal
Classe Personnage qui va reprsenter un personnage de jeu de rle
class Personnage
{

Crer une classe


Droits daccs en
encapsulation

}; // N oubliez pas le point - virgule la fin !

Sparation
prototypes et
dfinitions

Constructeur /
Destructeur

Syntaxe

Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Mot cl class suivi du nom choisi ;


Tout va tre dfinit entre les accolades.

Surcharge
doprateurs
Introduction

Attention
il y a un point-virgule aprs laccolade fermante

Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

7 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Crer une classe


POO C++
Y. Morre
Introduction
La POO
Les secret de string

Les classes

Attributs et mthodes
De quoi notre objet a t il besoin pour fonctionner ?

Crer une classe

tape importante de la rflexion ;

Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Attributs
Il caractriser la classe : variables qui voluent dans le temps ;

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes

Mthodes
Elles dfinissent les actions de la classe ;

Interaction entre
classes

Surcharge
doprateurs
Introduction

Elles lisent et modifient les attributs.

Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

8 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Crer une classe


POO C++
Y. Morre
Introduction
La POO
Les secret de string

Les classes

Attributs et mthodes
De quoi notre objet a t il besoin pour fonctionner ?

Crer une classe

tape importante de la rflexion ;

Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Attributs
Il caractriser la classe : variables qui voluent dans le temps ;

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes

Mthodes
Elles dfinissent les actions de la classe ;

Interaction entre
classes

Surcharge
doprateurs
Introduction

Elles lisent et modifient les attributs.

Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

8 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Crer une classe


POO C++
Y. Morre
Introduction
La POO
Les secret de string

Les classes

Attributs et mthodes
De quoi notre objet a t il besoin pour fonctionner ?

Crer une classe

tape importante de la rflexion ;

Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Attributs
Il caractriser la classe : variables qui voluent dans le temps ;

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes

Mthodes
Elles dfinissent les actions de la classe ;

Interaction entre
classes

Surcharge
doprateurs
Introduction

Elles lisent et modifient les attributs.

Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

8 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Cration de la classe
POO C++
Y. Morre
Introduction

Fichier Personnage.h

La POO
Les secret de string

Les classes
Crer une classe
Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Surcharge
doprateurs
Introduction

# ifndef P E R S O N N A G E _ H _ I N C L U D E D
# define P E R S O N N A G E _ H _ I N C L U D E D
# include < iostream >
# include < string >
using n a m e s p a c e std ;
class Personnage
{
// M thodes
void recevoirDegat s ( int nbDegats ) {
}
void attaquer ( Personnage & cible ) {
}
void b oi re Po ti on DeV i e ( int quant itePotio n ) { }
void changerArme ( string nomNouvelleArme , int d e g a t s N o u v e l l e A r m e ) {
bool estVivant () { return true ;}
// A t t r i b u t s
int m_vie ;
int m_mana ;
string m_nomArme ;
int m_degatsArme ;
};
# endif // P E R S O N N A G E _ H _ I N C L U D E D

Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

9 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Instanciation en objets
POO C++

Fichier testPersonage.cpp

Y. Morre
Introduction
La POO
Les secret de string

Les classes
Crer une classe
Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Constructeur /
Destructeur

# include " Personnage . h "


int main ()
{
Personnage david , goliath ;
// Cr ation de 2 objets de type P e r s o n n a g e : david et goliath
goliath . attaquer ( david );
// goliath attaque david
david . bo ireP ot io nD e V i e (20); // david r cup re 20 de vie en buvant une potion
goliath . attaquer ( david );
// goliath r attaque david
david . attaquer ( goliath );
// david contre - attaque ... c est assez clair non ?
goliath . changerArme ( " Double hache tranchante v n neuse de la mort " , 40);
goliath . attaquer ( david );
return 0;
}

Constructeur
Destructeur
Mthodes constantes

Compilation

Interaction entre
classes

Surcharge
doprateurs
Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux

$ g ++ - Wall -o testPerson nage testPe rsonnage . cpp Personnage . h


Personnage . h : In f u n c t i o n int main () :
Personnage . h :16:10: erreur : void Personnage :: attaquer ( Personnage &) is private
testP ersonnage . cpp :11:27: erreur : l int rieur du contexte
Personnage . h :21:10: erreur : void Personnage :: b o i r e P o t i o n D e Vi e ( int ) is private
testP ersonnage . cpp :12:30: erreur : l int rieur du contexte
Personnage . h :16:10: erreur : void Personnage :: attaquer ( Personnage &) is private
[...]
x

Surcharge
doprateurs de
comparaisons

Bibliographie /

10 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Droits daccs en encapsulation


POO C++

Erreur de droit daccs


Le compilateur renvoie une erreur indiquant un problme daccs.

Y. Morre
Introduction
La POO
Les secret de string

Les classes

Droits daccs des attributs/mthodes


Chaque attribut et chaque mthode dune classe peut possder son
propre droit daccs :

Crer une classe


Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

public : lattribut ou la mthode peut tre appel depuis


lextrieur de lobjet ;

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

private : lattribut ou la mthode ne peut pas tre appel


depuis lextrieur de lobjet.
Par dfaut, tous les lments dune classe sont private ;

Surcharge
doprateurs

Il existe aussi les droits protected et friends ( venir).

Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

Modification du code source


Mthodes avec le droit public ;
Variables avec le droit private.

11 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Droits daccs en encapsulation


POO C++

Erreur de droit daccs


Le compilateur renvoie une erreur indiquant un problme daccs.

Y. Morre
Introduction
La POO
Les secret de string

Les classes

Droits daccs des attributs/mthodes


Chaque attribut et chaque mthode dune classe peut possder son
propre droit daccs :

Crer une classe


Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

public : lattribut ou la mthode peut tre appel depuis


lextrieur de lobjet ;

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

private : lattribut ou la mthode ne peut pas tre appel


depuis lextrieur de lobjet.
Par dfaut, tous les lments dune classe sont private ;

Surcharge
doprateurs

Il existe aussi les droits protected et friends ( venir).

Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

Modification du code source


Mthodes avec le droit public ;
Variables avec le droit private.

11 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Droits daccs en encapsulation


POO C++

Erreur de droit daccs


Le compilateur renvoie une erreur indiquant un problme daccs.

Y. Morre
Introduction
La POO
Les secret de string

Les classes

Droits daccs des attributs/mthodes


Chaque attribut et chaque mthode dune classe peut possder son
propre droit daccs :

Crer une classe


Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

public : lattribut ou la mthode peut tre appel depuis


lextrieur de lobjet ;

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

private : lattribut ou la mthode ne peut pas tre appel


depuis lextrieur de lobjet.
Par dfaut, tous les lments dune classe sont private ;

Surcharge
doprateurs

Il existe aussi les droits protected et friends ( venir).

Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

Modification du code source


Mthodes avec le droit public ;
Variables avec le droit private.

11 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Modification de la classe
POO C++

Fichier Personnage.h

Y. Morre
Introduction
La POO
Les secret de string

Les classes
Crer une classe
Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Surcharge
doprateurs
Introduction

# ifndef P E R S O N N A G E _ H _ I N C L U D E D
# define P E R S O N N A G E _ H _ I N C L U D E D
# include < iostream >
# include < string >
using n a m e s p a c e std ;
class Personnage
{
// Tout ce qui suit est public ( a c c e s s i b l e depuis l ext rieur )
public :
// M thodes
void recevoirDegat s ( int nbDegats ) {
}
void attaquer ( Personnage & cible ) {
}
void b oi re Po ti on DeV i e ( int quant itePotio n ) { }
void changerArme ( string nomNouvelleArme , int d e g a t s N o u v e l l e A r m e ) {
bool estVivant () { return true ;}
private :
// Tout ce qui suit est priv ( i n a c c e s s i b l e depuis l ext rieur )
// A t t r i b u t s
int m_vie ;
int m_mana ;
string m_nomArme ;
int m_degatsArme ;
};
# endif // P E R S O N N A G E _ H _ I N C L U D E D

Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux

Compilation

Surcharge
doprateurs de
comparaisons

Aucune erreur : Appel des mthodes publiques de puis le main.

Bibliographie /

12 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Modification de la classe
POO C++

Fichier Personnage.h

Y. Morre
Introduction
La POO
Les secret de string

Les classes
Crer une classe
Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Surcharge
doprateurs
Introduction

# ifndef P E R S O N N A G E _ H _ I N C L U D E D
# define P E R S O N N A G E _ H _ I N C L U D E D
# include < iostream >
# include < string >
using n a m e s p a c e std ;
class Personnage
{
// Tout ce qui suit est public ( a c c e s s i b l e depuis l ext rieur )
public :
// M thodes
void recevoirDegat s ( int nbDegats ) {
}
void attaquer ( Personnage & cible ) {
}
void b oi re Po ti on DeV i e ( int quant itePotio n ) { }
void changerArme ( string nomNouvelleArme , int d e g a t s N o u v e l l e A r m e ) {
bool estVivant () { return true ;}
private :
// Tout ce qui suit est priv ( i n a c c e s s i b l e depuis l ext rieur )
// A t t r i b u t s
int m_vie ;
int m_mana ;
string m_nomArme ;
int m_degatsArme ;
};
# endif // P E R S O N N A G E _ H _ I N C L U D E D

Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux

Compilation

Surcharge
doprateurs de
comparaisons

Aucune erreur : Appel des mthodes publiques de puis le main.

Bibliographie /

12 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Encapsulation
POO C++
Y. Morre
Introduction
La POO
Les secret de string

Les classes

A graver au laser sur votre rtine !

Encapsulation : tous les attributs


dune classe doivent toujours tre
privs.

Crer une classe


Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes

Principe qui donne sa puissance la POO. Permet de masquer les


informations lutilisateur. Le contenu de lobjet ne doit pas tre
accessible autrement que par les mthodes.

Interaction entre
classes

Surcharge
doprateurs
Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

13 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Encapsulation
POO C++
Y. Morre
Introduction
La POO
Les secret de string

Les classes

A graver au laser sur votre rtine !

Encapsulation : tous les attributs


dune classe doivent toujours tre
privs.

Crer une classe


Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes

Principe qui donne sa puissance la POO. Permet de masquer les


informations lutilisateur. Le contenu de lobjet ne doit pas tre
accessible autrement que par les mthodes.

Interaction entre
classes

Surcharge
doprateurs
Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

13 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Sparation prototypes et dfinitions


POO C++
Y. Morre
Introduction
La POO
Les secret de string

Dcoupage en plusieurs fichiers

Les classes
Crer une classe

code modulaire : sparer les mthodes en prototypes et


dfinitions dans deux fichiers diffrents ;

Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

un header (fichier maClasse.h) qui contiendra les attributs et


les prototypes de la classe ;

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

un fichier source (fichier maClasse.cpp) qui contiendra la


dfinition des mthodes et leur implmentation ;
le programme principale dans un autre fichier source main.cpp.

Surcharge
doprateurs
Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

14 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Sparation prototypes et dfinitions


POO C++
Y. Morre
Introduction

Fichier Personnage.h

La POO
Les secret de string

Les classes
Crer une classe
Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Surcharge
doprateurs
Introduction

# ifndef DEF_P ERSONNAGE


# define DEF_P ERSONNAGE
# include < string >
class Personnage
{
public :
void recevoirDegat s ( int nbDegats );
void attaquer ( Personnage & cible );
void b oi re Po ti on DeV i e ( int quant itePotio n );
void changerArme ( std :: string nomNouvelleArme , int d e g a t s N o u v e l l e A r m e );
bool estVivant ();
private :
int m_vie ;
int m_mana ;
std :: string m_nomArme ; // Pas de using n a m e s p a c e std ,
// il faut donc m e t t r e s t d :: devant string
int m_degatsArme ;
};
# endif

Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

15 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Sparation prototypes et dfinitions


POO C++
Y. Morre

Fichier Personnage.cpp

Introduction
La POO
Les secret de string

Les classes
Crer une classe
Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Surcharge
doprateurs
Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux

# include " Personnage . h "


using n a m e s p a c e std ;
void Personnage :: rec evoirDeg ats ( int nbDegats ){
m_vie -= nbDegats ;
// On enl ve le nombre de d g ts re us la vie du p e r s o n n a g e
if ( m_vie < 0) // Pour viter d avoir une vie n gative
m_vie = 0; // On met la vie 0 ( cela veut dire mort )
}
void Personnage :: attaquer ( Personnage & cible ){
cible . recevo irDegats ( m_degatsArme );
// On inflige la cible les d g ts que cause notre arme
}
void Personnage :: bo ir e P o t i o n D e Vi e ( int quant itePotio n ){
m_vie += quantitePoti on ;
if ( m_vie > 100) // I n t e r d i c t i o n de d passer 100 de vie
m_vie = 100;
}
void Personnage :: changerArme ( string nomNouvelleArme , int d e g a t s N o u v e l l e A r m e ){
m_nomArme = n om No uv e ll eA rm e ;
m_degatsArme = d e g a t s N o u v e l l e A r m e ;
}
bool Personnage :: estVivant (){
if ( m_vie > 0) // Plus de 0 de vie ?
return true ; // VRAI , il est vivant !
else
return false ; // FAUX , il n est plus vivant !
}

Surcharge
doprateurs de
comparaisons

Bibliographie /

16 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Sparation prototypes et dfinitions


POO C++
Y. Morre
Introduction
La POO
Les secret de string

Fichier mainPersonnage.cpp

Les classes
Crer une classe
Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Surcharge
doprateurs

# include < iostream >


# include " Personnage . h " // Ne pas oublier
using n a m e s p a c e std ;
int main ()
{
Personnage david , goliath ;
// Cr ation de 2 objets de type P e r s o n n a g e : david et goliath
goliath . attaquer ( david ); // goliath attaque david
david . b oi re Po ti on D e V i e (20); // david r cup re 20 de vie en buvant une potion
goliath . attaquer ( david ); // goliath r attaque david
david . attaquer ( goliath ); // david contre - attaque ... c est assez clair non ?
goliath . changerArme ( " Double hache tranchante v n neuse de la mort " , 40);
goliath . attaquer ( david );
return 0;
}

Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

17 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Explications
POO C++

Fichier Personnage.h

Y. Morre
Introduction
La POO
Les secret de string

Idem que dans Personnage.cpp prcdent, seulement il ny a plus


de corps de fonction ; Attention ne pas oublier le ; en fin de ligne.

Les classes
Crer une classe

Fichier Personnage.cpp

Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Implmentation des mthodes


Syntaxe : type maClasse::maMethode(type paramtre,
...)

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Exemple : void Personnage::recevoirDegats(int


nbDegats) ...
Ici la mthode le droit de modifier les attributs car on est
lintrieur de la classe.

Surcharge
doprateurs
Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques

Fichier mainPersonnage.cpp

Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

18 / 59

Inclusion de lentte de la classe Personnage.h


C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Explications
POO C++

Fichier Personnage.h

Y. Morre
Introduction
La POO
Les secret de string

Idem que dans Personnage.cpp prcdent, seulement il ny a plus


de corps de fonction ; Attention ne pas oublier le ; en fin de ligne.

Les classes
Crer une classe

Fichier Personnage.cpp

Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Implmentation des mthodes


Syntaxe : type maClasse::maMethode(type paramtre,
...)

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Exemple : void Personnage::recevoirDegats(int


nbDegats) ...
Ici la mthode le droit de modifier les attributs car on est
lintrieur de la classe.

Surcharge
doprateurs
Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques

Fichier mainPersonnage.cpp

Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

18 / 59

Inclusion de lentte de la classe Personnage.h


C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Explications
POO C++

Fichier Personnage.h

Y. Morre
Introduction
La POO
Les secret de string

Idem que dans Personnage.cpp prcdent, seulement il ny a plus


de corps de fonction ; Attention ne pas oublier le ; en fin de ligne.

Les classes
Crer une classe

Fichier Personnage.cpp

Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Implmentation des mthodes


Syntaxe : type maClasse::maMethode(type paramtre,
...)

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Exemple : void Personnage::recevoirDegats(int


nbDegats) ...
Ici la mthode le droit de modifier les attributs car on est
lintrieur de la classe.

Surcharge
doprateurs
Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques

Fichier mainPersonnage.cpp

Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

18 / 59

Inclusion de lentte de la classe Personnage.h


C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Remarques diverses
POO C++
Y. Morre
Introduction
La POO
Les secret de string

Les classes
Crer une classe
Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

struct ou class
On peut utiliser struct en C++ pour dfinir une classe. Dans ce cas
les mthodes et attributs sont publics au lieu de privs par dfaut.
Directives using

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Dans les .h, il est recommand de ne jamais mettre la directive


using namespace std; car cela pourrait avoir des effets
nfastes, par la suite, lorsque vous utiliserez la classe.
Par consquent, il faut rajouter le prfixe std:: devant chaque
string du .h. Le cas chant vous obtenez une erreur.

Surcharge
doprateurs
Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

19 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Remarques diverses
POO C++
Y. Morre
Introduction
La POO
Les secret de string

Les classes
Crer une classe
Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

struct ou class
On peut utiliser struct en C++ pour dfinir une classe. Dans ce cas
les mthodes et attributs sont publics au lieu de privs par dfaut.
Directives using

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Dans les .h, il est recommand de ne jamais mettre la directive


using namespace std; car cela pourrait avoir des effets
nfastes, par la suite, lorsque vous utiliserez la classe.
Par consquent, il faut rajouter le prfixe std:: devant chaque
string du .h. Le cas chant vous obtenez une erreur.

Surcharge
doprateurs
Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

19 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Constructeur / Destructeur
POO C++
Y. Morre
Introduction
La POO
Les secret de string

Les classes

Dfinitions
le constructeur : cest une mthode appele automatiquement
chaque fois que lon cre un objet bas sur cette classe.

Crer une classe


Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

le destructeur : cest une mthode appele automatiquement


lorsquun objet est dtruit, par exemple la fin de la fonction
dans laquelle il a t dclar ou, si lobjet a t allou
dynamiquement avec new, lors dun delete.

Surcharge
doprateurs
Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

20 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Constructeur
POO C++

Dfinitions
cest une mthode qui sert construire lobjet. Ds quon cre
un objet, le constructeur est automatiquement appel ;

Y. Morre
Introduction
La POO
Les secret de string

Les classes
Crer une classe
Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Un constructeur par dfaut est automatiquement cr par le


compilateur. Cest un constructeur vide, qui ne fait rien de
particulier.
On va crer son propre constructeur afin, gnralement, dy
raliser des initialisations

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Dans la classe, les attributs sont dclars, mais pas initialiss


(interdit) ;

Surcharge
doprateurs
Introduction
Classe Duree

On va crer son propre constructeur afin, gnralement, dy


raliser des initialisations ;

Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

Rle du constructeur
Rle dinitialisation de variables ;

21 / 59

Constructeur est indispensable pour initialiser les attributs non


objet (types standards) ;
C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Constructeur
POO C++

Dfinitions
cest une mthode qui sert construire lobjet. Ds quon cre
un objet, le constructeur est automatiquement appel ;

Y. Morre
Introduction
La POO
Les secret de string

Les classes
Crer une classe
Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Un constructeur par dfaut est automatiquement cr par le


compilateur. Cest un constructeur vide, qui ne fait rien de
particulier.
On va crer son propre constructeur afin, gnralement, dy
raliser des initialisations

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Dans la classe, les attributs sont dclars, mais pas initialiss


(interdit) ;

Surcharge
doprateurs
Introduction
Classe Duree

On va crer son propre constructeur afin, gnralement, dy


raliser des initialisations ;

Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

Rle du constructeur
Rle dinitialisation de variables ;

21 / 59

Constructeur est indispensable pour initialiser les attributs non


objet (types standards) ;
C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Constructeur
POO C++

Cration
cest une mthode un peut particulire :

Y. Morre
Introduction
La POO
Les secret de string

Les classes
Crer une classe
Droits daccs en
encapsulation

Il faut que la mthode ait le mme nom que la classe (ici


Personnage) ;
La mthode ne doit rien renvoyer, pas mme void ! Cest une
mthode sans aucun type de retour.

Sparation
prototypes et
dfinitions

Fichier Personnage.h

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Surcharge
doprateurs
Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux

# include < string >


class Personnage {
public :
Personnage (); // C o n s t r u c t e u r
void recevoirDegat s ( int nbDegats );
void attaquer ( Personnage & cible );
void b oi re Po ti on DeV i e ( int quant itePotio n );
void changerArme ( std :: string nomNouvelleArme , int d e g a t s N o u v e l l e A r m e );
bool estVivant ();
private :
int m_vie ;
int m_mana ;
std :: string m_nomArme ;
int m_degatsArme ;
};

Surcharge
doprateurs de
comparaisons

Bibliographie /

22 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Constructeur
POO C++
Y. Morre
Introduction
La POO
Les secret de string

Les classes

Cration
on ajoute ensuite le code source du constructeur dans
limplmentation

Crer une classe


Droits daccs en
encapsulation

dans Fichier Personnage.cpp

Sparation
prototypes et
dfinitions

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Personnage :: Personnage ()
{
m_vie = 100;
m_mana = 100;
m_nomArme = " Ep e rouill e " ;
m_degatsArme = 10;
}

Surcharge
doprateurs
Introduction

Attention
Il ny a pas de type de retour pour le constructeur.

Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

23 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Constructeur
POO C++

Cration (2) : liste dinitialisation

Y. Morre
Introduction
La POO
Les secret de string

Autre faon dinitialiser avec un constructeur : la liste


dinitialisation

Les classes
Crer une classe

dans Fichier Personnage.cpp

Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Personnage :: Personnage () : m_vie (100) , m_mana (100) ,


m_nomArme ( " Ep e rouill e " ) , m_degatsArme (10)
{
// Rien mettre dans le corps du constructeur , tout a d j t fait !
}

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Syntaxe

Surcharge
doprateurs

On ajoute : puis la liste des attributs initialiser (avec valeur


entre parenthses) spars par des virgules.

Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques

La liste dinitialisation est une bonne habitude prendre.

Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

24 / 59

Le prototype du constructeur (dans le .h) ne change pas


C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Constructeur
POO C++

Surcharger le constructeur

Y. Morre

Lorsque les oprateurs sont des fonctions, on parle en gnral de


surcharge doprateur ;

Introduction
La POO
Les secret de string

Les classes
Crer une classe
Droits daccs en
encapsulation

limplmentation est choisie en fonction du type des oprandes


(on parle galement de polymorphisme ad hoc) ;
C++ autorise la surcharge.

Sparation
prototypes et
dfinitions

mthodes = fonctions, on peut donc surcharger le constructeur.

Constructeur /
Destructeur

Intrt de la surcharge

Constructeur
Destructeur
Mthodes constantes

Crer un objet de plusieurs faons diffrentes.

Interaction entre
classes

Syntaxe

Surcharge
doprateurs
Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

25 / 59

// Dans P e r s o n n a g e . h
Personnage ( std :: string nomArme , int degatsArme );
// pr fix std :: o b l i g a t o i r e car pas de using dans . h
// Dans P e r s o n n a g e . cpp
Personnage :: Personnage ( string nomArme , int degatsArme ) : m_vie (100) ,
m_mana (100) , m_nomArme ( nomArme ) , m_degatsArme ( degatsArme ){
}
// u t i l i s a t i o n m a i n P e r s o n n a g e . c
Personnage david , goliath ( " Ep e aiguis e " , 20);
C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Destructeur
POO C++

Dfinitions
Cest une mthode appele lorsque lobjet est supprim de la
mmoire.

Y. Morre
Introduction
La POO
Les secret de string

Les classes

rle : dsallouer la mmoire (delete) alloue dynamiquement.


Dans notre cas, il ny a pas eu dallocation dynamique (new)
(inutile ici) ;

Crer une classe


Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Un destructeur est une mthode qui commence par un tilde ( )


suivi du nom de la classe.

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Un destructeur ne renvoie aucune valeur, pas mme void


(comme le constructeur).
le destructeur ne peut prendre aucun paramtre. Il y a donc
toujours un seul destructeur, il ne peut pas tre surcharg.

Surcharge
doprateurs
Introduction
Classe Duree

Exemple

Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

26 / 59

Personnage ::~ Personnage (){


/* En temps normal , un d e s t r u c t e u r fait souvent des delete et q u e l q u e s
autres v r i f i c a t i o n s si n c e s s a i r e avant la d e s t r u c t i o n de l objet . */
}
C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Mthodes constantes
POO C++
Y. Morre

Explications
Introduction

Les mthodes constantes sont des mthodes de lecture seule ;

La POO
Les secret de string

Elles possdent le mot-cl const la fin de leur prototype et de


leur dclaration ;

Les classes
Crer une classe
Droits daccs en
encapsulation

Indique au compilateur que votre mthode ne modifie pas lobjet


(valeurs de ses attributs) ;

Sparation
prototypes et
dfinitions

Constructeur /
Destructeur

Exemple : affichage dinformations.

Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Surcharge
doprateurs

Syntaxe
// Dans P e r s o n n a g e . h P r o t o t y p e de la m thode :
void maMethode ( int parametre ) const ;
// Dans P e r s o n n a g e . cpp D c l a r a t i o n de la m thode :
void MaClasse :: maMethode ( int parametre ) const
{
// code source
}

Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

27 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Mthodes constantes
POO C++

Exemples 1

Y. Morre
Introduction
La POO
Les secret de string

Les classes
Crer une classe
Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Constructeur /
Destructeur
Constructeur

bool Personnage :: estVivant () const


{
if ( m_vie > 0)
{
return true ;
}
else
{
return false ;
}
}

Destructeur
Mthodes constantes
Interaction entre
classes

Intrt
Pour vous : vous savez que votre mthode ne fait que lire les
attributs et vous vous interdisez ds le dbut de les modifier.

Surcharge
doprateurs
Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

28 / 59

Pour les utilisateurs de votre classe : cest trs important aussi


pour eux, cela leur indique que la mthode se contente de
renvoyer un rsultat et quelle ne modifie pas lobjet.
C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Interaction entre classes


POO C++

Un programme est fait de plusieurs classes

Y. Morre

La POO devient puissante quend on commence combiner


plusieurs objets, classes

Introduction
La POO
Les secret de string

Cration dune nouvelle classe Arme et intraction avec notre


Personnage.

Les classes
Crer une classe
Droits daccs en
encapsulation

Cration des fichiers Arme.h et Arme.cpp.

Sparation
prototypes et
dfinitions

Constructeur /
Destructeur

Fichier Arme.h

Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Surcharge
doprateurs
Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

29 / 59

# ifndef DEF_ARME
# define DEF_ARME
# include < iostream >
# include < string >
class Arme {
public :
Arme ();
Arme ( std :: string nom , int degats );
void changer ( std :: string nom , int degats );
void afficher () const ;
private :
std :: string m_nom ;
int m_degats ;
};
# endif

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Interaction entre classes


POO C++
Y. Morre

Fichier Arme.cpp

Introduction
La POO
Les secret de string

# include " Arme . h "


using n a m e s p a c e std ;
Arme :: Arme () : m_nom ( " Ep e rouill e " ) , m_degats (10) {}
Arme :: Arme ( string nom , int degats ) : m_nom ( nom ) , m_degats ( degats ){}
void Arme :: changer ( string nom , int degats ){
m_nom = nom ;
m_degats = degats ;
}
void Arme :: afficher () const {
cout << " Arme : " << m_nom << " ( D gats : " << m_degats << " ) " << endl ;
}

Les classes
Crer une classe
Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Et ensuite ?
Modification de la classe Personnage pour prendre en compte et
utiliser la nouvelle classe ;

Surcharge
doprateurs
Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques

Utilisation dun Objet dans un autre Objet.

Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

30 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Interaction entre classes


POO C++

Adaptation de notre classe initiale Personnage

Y. Morre

Suppression des attributs inutiles m_nomArme et m_degatsArme ;


Remplacement par lobjet Arme m_arme ;

Introduction
La POO
Les secret de string

On ne supprime pas de mthodes. Cette classe peut tre utilise


ailleurs. On va toujours modifier ou ajouter des mthodes.

Les classes
Crer une classe
Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Fichier Personnage.h

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Surcharge
doprateurs
Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

31 / 59

# ifndef DEF_P ERSONNAGE


# define DEF_P ERSONNAGE
# include < iostream >
# include < string >
# include " Arme . h " // Ne PAS oublier d inclure Arme . h pour en avoir la d f i n i t i o n
class Personnage {
public :
Personnage ();
Personnage ( std :: string nomArme , int degatsArme );
~ Personnage ();
void recevoirDegat s ( int nbDegats );
void attaquer ( Personnage & cible );
void b oi re Po ti on DeV i e ( int quant itePotio n );
void changerArme ( std :: string nomNouvelleArme , int d e g a t s N o u v e l l e A r m e );
bool estVivant () const ;
private :
int m_vie ;
int m_mana ;
Arme m_arme ; // Notre P e r s o n n a g e poss de une Arme
};
# endif
C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Interaction entre classes


POO C++

Adaptation de notre classe initiale Personnage

Y. Morre

Suppression des attributs inutiles m_nomArme et m_degatsArme ;

Introduction
La POO
Les secret de string

Les classes

Remplacement par lobjet Arme m_arme ;


On ne supprime pas de mthodes. Cette classe peut tre utilise
ailleurs. On va toujours modifier ou ajouter des mthodes.

Crer une classe


Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Modification de Personnage.cpp

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Surcharge
doprateurs
Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux

// M o d i f i c a t i o n r aliser
Personnage :: Personnage () : m_vie (100) , m_mana (100){
// Rien mettre dans le corps du constructeur , tout a d j t fait !
}
Personnage :: Personnage ( string nomArme , int degatsArme ) : m_vie (100) ,
m_mana (100) , m_arme ( nomArme , degatsArme ){
// Rien mettre dans le corps du constructeur , tout a d j t fait !
}
void Personnage :: attaquer ( Personnage & cible ){
cible . recev oirDegat s ( m_arme . getDegats ());
// On inflige la cible les d g ts que cause notre arme
}
void Personnage :: changerArme ( string nomNouvelleArme , int d e g a t s N o u v e l l e A r m e ){
m_arme . changer ( nomNouvelleArme , d e g a t s N o u v e l l e A r m e );
}

Surcharge
doprateurs de
comparaisons

Bibliographie /

32 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Interaction entre classes


POO C++

Explications des modifications

Y. Morre

Modification des mthodes qui utilisent larme : constructeurs ;

Introduction
La POO
Les secret de string

Les classes
Crer une classe
Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Surcharge
doprateurs

Utilisation du constructeur surcharg Arme dans le constructeur


surcharg Personnage ;
Problme de la attaquer :
cible.recevoirDegats(m_arme.m_degats); est interdit
depuis la classe Personnage. Les attributs de Arme sont privs
il faut ajouter une mthode pour rcuprer/accder ces
donnes dans la classe Arme : Accesseurs.
Gnralement ces mthodes sont nommes get et
respectivement set pour lire et respectivement crire dans les
attributs

Modification de Arme.cpp

Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

33 / 59

// Ajout dans Arme . h


int getDegats () const ;
// Ajout dans Arme . cpp
int Arme :: getDegats () const {
return m_degats ;
}

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Interaction entre classes


POO C++

Modification de la mthode attaquer

Y. Morre
Introduction
La POO
Les secret de string

void Personnage :: attaquer ( Personnage & cible ){


cible . recevoirDegat s ( m_arme . getDegats ());
}

Les classes
Crer une classe
Droits daccs en
encapsulation

Modification de la mthode changerArme

Sparation
prototypes et
dfinitions

Impossibilit daccder directement aux attributs de m_arme ;

Constructeur /
Destructeur

On pourrait crer un accesseur en criture sur les attributs ;

Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Bien plus simple de passer par la mthode changer de la classe


Arme.
m_arme.changer(...).

Surcharge
doprateurs
Introduction

Modification de la mthode changerArme

Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

34 / 59

void Personnage :: changerArme ( string nomNouvelleArme , int d e g a t s N o u v e l


m_arme . changer ( nomNouvelleArme , d e g a t s N o u v e l l e A r m e );
}

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Mise en uvre des classes


POO C++
Y. Morre
Introduction

Mthode pour afficher les tats

La POO
Les secret de string

Les classes

Nos personnages se battent dans le main, mais on ne voit rien ;


Mthode constante pour afficher ltat de chaque personnage ;

Crer une classe


Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Ajout de la mthode afficherEtat

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Surcharge
doprateurs
Introduction
Classe Duree

// Dans P e r s o n n a g e . h
void afficherEtat () const ;
// Dans P e r s o n n a g e . cpp
void Personnage :: afficherEtat () const {
cout << " Vie : " << m_vie << endl ;
cout << " Mana : " << m_mana << endl ;
m_arme . afficher ();
}

Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

35 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Mise en uvre des classes


POO C++

Modification du fichier mainPersonnage.cpp

Y. Morre
Introduction
La POO
Les secret de string

Les classes
Crer une classe
Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Constructeur /
Destructeur
Constructeur
Destructeur

int main () {
// Cr ation des p e r s o n n a g e s
Personnage david , goliath ( " Ep e aiguis e " , 20);
// Au combat !
goliath . attaquer ( david );
david . bo ireP ot io nD e V i e (20);
goliath . attaquer ( david );
david . attaquer ( goliath );
goliath . changerArme ( " Double hache tranchante v n neuse de la mort " , 40);
goliath . attaquer ( david );
// Temps mort ! Voyons voir la vie de chacun ...
cout << " David " << endl ;
david . afficherEtat ();
cout << endl << " Goliath " << endl ;
goliath . afficherEtat ();
return 0;
}

Mthodes constantes
Interaction entre
classes

Excution

Surcharge
doprateurs
Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

36 / 59

$ ./ main Personna ge
David
Vie : 40
Mana : 100
Arme : Ep e rouill e ( D gats : 10)
Goliath
Vie : 90
Mana : 100
Arme : Double hache tranchante v n neuse de la mort ( D gats : 40)
C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Schma global de notre projet


POO C++
Y. Morre
Introduction
La POO
Les secret de string

Les classes
Crer une classe
Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Surcharge
doprateurs
Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

37 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Surcharge doprateurs
POO C++
Y. Morre
Introduction
La POO
Les secret de string

Les classes
Crer une classe

Dfinition
Cest une technique qui permet de raliser des oprations
mathmatiques intelligentes entre vos objets ;
Utiliser +,-,*,/, etc. sur des objets quelconques (pas
seulement les types numriques).

Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Constructeur /
Destructeur

En pratique

Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Soit une classe pour stocker une dure (par exemple 4h23m)
Soit deux objets de type Duree que vous voulez additionner

Surcharge
doprateurs

Classiquement : resultat = additionner(duree1,


duree2);

Introduction
Classe Duree

Par surcharge doprateur : resultat = duree1 + duree2;

Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

38 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Classe Duree
POO C++
Y. Morre

Gnralits
Dfinitions dune classe adapte la surcharge ;

Introduction
La POO
Les secret de string

Les classes
Crer une classe

Capable capable de stocker des heures, des minutes et des


secondes ;

Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Fichier Duree.h

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Surcharge
doprateurs
Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux

# ifndef DEF_DUREE
# define DEF_DUREE
class Duree {
public :
Duree ( int heures = 0 , int minutes = 0 , int secondes = 0);
// Valeur par d faut dans le c o n s t r u c t e u r
private :
int m_heures ;
int m_minutes ;
int m_secondes ;
};
# endif

Surcharge
doprateurs de
comparaisons

Bibliographie /

39 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Classe Duree
POO C++
Y. Morre
Introduction

Fichier Duree.h et mainDuree.cpp

La POO
Les secret de string

Les classes

// Fichier Duree . cpp


# include " Duree . h "

Crer une classe


Droits daccs en
encapsulation

Duree :: Duree ( int heures , int minutes , int secondes ) : m_heures ( heures
m_minutes ( minutes ) , m_secondes ( secondes ){
}

Sparation
prototypes et
dfinitions

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

// Fichier m a i n D u r e e . cpp
# include < iostream >
# include " Duree . h "
int main (){
Duree duree1 (0 , 10 , 28) , duree2 (0 , 15 , 2);
return 0;
}

Surcharge
doprateurs
Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

40 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Surcharge doprateurs arithmtiques


POO C++
Y. Morre
Introduction

Oprateur +

La POO
Les secret de string

Pour utiliser le symbole + entre deux objets, Cration dune


fonction nomme operator+ ;

Les classes
Crer une classe
Droits daccs en
encapsulation

Syntaxe de la fonction : Objet operator+(Objet const& a,


Objet const& b);

Sparation
prototypes et
dfinitions

Constructeur /
Destructeur

Ce nest pas une mthode, mais une fonction normale en dehors


de la classe (ici Dure) ;

Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Surcharge
doprateurs

Syntaxe : Duree operator+(Duree const& a, Duree


const& b);
Utilisation : resultat = duree1 + duree2; //Utilisation
de operator+

Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

41 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Surcharge doprateurs arithmtiques


POO C++
Y. Morre
Introduction

Oprateur +=

La POO
Les secret de string

Contrairement +, += sera une mthode de la classe ;

Les classes
Crer une classe

Syntaxe de la mthode : Duree& operator+=(Duree const&


duree);

Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Elle reoit en argument une autre Duree additionner et renvoie


une rfrence sur lobjet lui-mme ;

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Surcharge
doprateurs

Utilisation : duree1 += duree2; //Utilisation de la


mthode operator+= de lobjet duree1
Important

Introduction

On utilise les rfrences pour viter de modifier les objets reus.

Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

42 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Surcharge doprateurs arithmtiques


POO C++

Mthode +=

Y. Morre
Introduction
La POO
Les secret de string

Les classes
Crer une classe
Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Surcharge
doprateurs
Introduction

Duree & Duree :: op e r a t o r +=( Duree const & duree2 ){


// 1 : ajout des s e c o n d e s
m_secondes += duree2 . m_secondes ;
// E x c e p t i o n n e l l e m e n t autoris car m me classe
// Si le nombre de s e c o n d e s d passe 60 , on rajoute des minutes
// Et on met un nombre de s e c o n d e s inf rieur 60
m_minutes += m_secondes / 60;
m_secondes %= 60;
// 2 : ajout des minutes
m_minutes += duree2 . m_minutes ;
// Si le nombre de minutes d passe 60 , on rajoute des heures
// Et on met un nombre de minutes inf rieur 60
m_heures += m_minutes / 60;
m_minutes %= 60;
// 3 : ajout des heures
m_heures += duree2 . m_heures ;
return * this ;
}

Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux

La mthode renvoie lobjet lui-mme laide de *this.

Surcharge
doprateurs de
comparaisons

Bibliographie /

Important
Cest un pointeur vers lobjet quon est en train de manipuler.

43 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Surcharge doprateurs arithmtiques


POO C++
Y. Morre
Introduction

Important

La POO
Les secret de string

Utilisation de la mthode += en utilisant une variable


intermdiaire de copie ;

Les classes
Crer une classe
Droits daccs en
encapsulation

On retourne la variable de copie que nest pas constante.

Sparation
prototypes et
dfinitions

Constructeur /
Destructeur

Fonction +

Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Surcharge
doprateurs
Introduction

Duree operator +( Duree const & a , Duree const & b )


{
Duree copie ( a );
copie += b ;
return copie ;
}

Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

44 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Surcharge doprateurs arithmtiques


POO C++
Y. Morre

Code final

Introduction
La POO
Les secret de string

# ifndef DEF_DUREE
# define DEF_DUREE
class Duree {
public :
Duree ( int heures = 0 , int minutes = 0 , int secondes = 0);
// Valeur par d faut dans le c o n s t r u c t e u r

Les classes
Crer une classe
Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Constructeur /
Destructeur

Duree & opera t o r +=( Duree const & a );


void afficher () const ;
private :
int m_heures ;
int m_minutes ;
int m_secondes ;

Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Surcharge
doprateurs

};

Introduction

Duree operator +( Duree const & a , Duree const & b );


# endif

Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

45 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Surcharge doprateurs arithmtiques


POO C++
Y. Morre

Code final

Introduction
La POO
Les secret de string

Les classes
Crer une classe
Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Surcharge
doprateurs
Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques

# include < iostream >


# include " Duree . h "
using n a m e s p a c e std ;
Duree :: Duree ( int heures , int minutes , int secondes ) : m_heures ( heures ) ,
m_minutes ( minutes ) , m_secondes ( secondes ){
}
Duree & Duree :: o p e r a t o r +=( const Duree & duree2 ) {
// 1 : ajout des s e c o n d e s
m_secondes += duree2 . m_secondes ;
m_minutes += m_secondes / 60;
m_secondes %= 60;
m_minutes += duree2 . m_minutes ;
m_heures += m_minutes / 60;
m_minutes %= 60;
m_heures += duree2 . m_heures ;
return * this ;
}
void Duree :: afficher () const {
cout << m_heures << " h " << m_minutes << " m " << m_secondes << " s " << endl ;
}
Duree o p e r a t o r +( Duree const & a , Duree const & b ){
Duree copie ( a );
copie += b ;
return copie ;
}

Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

46 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Surcharge doprateurs arithmtiques


POO C++
Y. Morre

Code final

Introduction
La POO
Les secret de string

Les classes
Crer une classe
Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Surcharge
doprateurs
Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques

# include < iostream >


# include " Duree . h "
using n a m e s p a c e std ;
int main (){
Duree duree1 (0 , 10 , 42) , duree2 (0 , 53 , 27);
Duree resultat ;
duree1 . afficher ();
cout << " + " << endl ;
duree2 . afficher ();
resultat = duree1 + duree2 ;
cout << " = " << endl ;
resultat . afficher ();
duree1 . afficher ();
cout << " + " << endl ;
duree2 . afficher ();
duree1 += duree2 ; // U t i l i s a t i o n directe de l op rateur +=
cout << " = " << endl ;
duree1 . afficher ();
return 0;
}

Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

47 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Surcharge doprateurs arithmtiques


POO C++
Y. Morre

Apport de la surcharge
Introduction
La POO
Les secret de string

Les classes

additionner en une fois plusieurs dures : resultat = duree1


+ duree2 + duree3;
additionner une Duree et un int en crant une nouvelle
fonction de surcharge.

Crer une classe


Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Nouvelle surcharge doprateur +

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Surcharge
doprateurs
Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques

// P r o t o t y p e
Duree & operator +=( int secondes );
// Impl m e n t a t i o n
Duree operator +( Duree const & duree , int secondes )
{
Duree copie ( duree );
copie += secondes ;
return copie ;
}

Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

48 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Surcharge doprateurs arithmtiques


POO C++
Y. Morre
Introduction
La POO
Les secret de string

Les classes
Crer une classe

Les autres oprateurs

Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

fonctions operator-() operator*() operator/()


operator%() ;

Constructeur /
Destructeur

mthodes operator-=() operator*=() operator/=()


operator%=() ;

Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Surcharge
doprateurs
Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

49 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Surcharge doprateurs de flux


POO C++
Y. Morre
Introduction

Oprateur < < et > >

La POO
Les secret de string

cout < < "Coucou !"; = operator< <(cout, "Coucou !");

Les classes

Les oprateurs de flux sont dfinis par dfaut pour les types de
variables int,double,char et string ;

Crer une classe


Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Comment faire pour utiliser loprateur < < avec cout et le


nouvel objet Duree ? ;

Constructeur /
Destructeur

Pas encore de fonction surcharge pour raliser lopration.

Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Remarque

Surcharge
doprateurs

Lorsque vous incluez <iostream>, un objet cout est


automatiquement dclar comme ceci : ostream cout;. ostream
est la classe, cout est lobjet.

Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

50 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Surcharge doprateurs de flux


POO C++
Y. Morre
Introduction

Oprateur < < et > >

La POO
Les secret de string

cout < < "Coucou !"; = operator< <(cout, "Coucou !");

Les classes

Les oprateurs de flux sont dfinis par dfaut pour les types de
variables int,double,char et string ;

Crer une classe


Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Comment faire pour utiliser loprateur < < avec cout et le


nouvel objet Duree ? ;

Constructeur /
Destructeur

Pas encore de fonction surcharge pour raliser lopration.

Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Remarque

Surcharge
doprateurs

Lorsque vous incluez <iostream>, un objet cout est


automatiquement dclar comme ceci : ostream cout;. ostream
est la classe, cout est lobjet.

Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

50 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Surcharge doprateurs de flux


POO C++

Implmentation doperator< <

Y. Morre
Introduction
La POO
Les secret de string

Les classes
Crer une classe
Droits daccs en
encapsulation

ostream & operator < <( ostream & flux , Duree const & duree )
{
flux << duree . m_heures << " h " << duree . m_minutes << " m "
<< duree . m_secondes << " s " ; // Erreur
return flux ;
}

Sparation
prototypes et
dfinitions

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Surcharge
doprateurs

Solutions

Introduction
Classe Duree

Cration daccesseurs(getHeures(), getMinutes(), ...) ;

Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

Problmes
Fonction externe la classe. Ne compile pas ! pas daccs aux
attributs ;

51 / 59

Utilisation du concept de classe friend ;


Utilisation dune mthode daffichage de la classe.
C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Surcharge doprateurs de flux


POO C++

Implmentation doperator< <

Y. Morre
Introduction
La POO
Les secret de string

Les classes
Crer une classe
Droits daccs en
encapsulation

ostream & operator < <( ostream & flux , Duree const & duree )
{
flux << duree . m_heures << " h " << duree . m_minutes << " m "
<< duree . m_secondes << " s " ; // Erreur
return flux ;
}

Sparation
prototypes et
dfinitions

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Surcharge
doprateurs

Solutions

Introduction
Classe Duree

Cration daccesseurs(getHeures(), getMinutes(), ...) ;

Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

Problmes
Fonction externe la classe. Ne compile pas ! pas daccs aux
attributs ;

51 / 59

Utilisation du concept de classe friend ;


Utilisation dune mthode daffichage de la classe.
C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Surcharge doprateurs de flux


POO C++

Implmentation doperator< <

Y. Morre
Introduction
La POO
Les secret de string

Les classes
Crer une classe
Droits daccs en
encapsulation

ostream & operator < <( ostream & flux , Duree const & duree )
{
flux << duree . m_heures << " h " << duree . m_minutes << " m "
<< duree . m_secondes << " s " ; // Erreur
return flux ;
}

Sparation
prototypes et
dfinitions

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Surcharge
doprateurs

Solutions

Introduction
Classe Duree

Cration daccesseurs(getHeures(), getMinutes(), ...) ;

Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

Problmes
Fonction externe la classe. Ne compile pas ! pas daccs aux
attributs ;

51 / 59

Utilisation du concept de classe friend ;


Utilisation dune mthode daffichage de la classe.
C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Surcharge doprateurs de flux


POO C++
Y. Morre

Implmentation doperator< <

Introduction
La POO
Les secret de string

Les classes
Crer une classe
Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Surcharge
doprateurs
Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques

// Duree . h ajouter
// std :: o b l i g a t o i r e car pas d include < iostream > dans . h
void afficher ( std :: ostream & flux ) const ;
std :: ostream & operator < <( std :: ostream & flux , Duree const & duree );
// Duree . cpp
// partie externe la classe
ostream & operator < <( ostream & flux , Duree const & duree )
{
duree . afficher ( flux ) ; // <- C h a n g e m e n t ici
return flux ;
}
// Partie public de la classe
void Duree :: afficher ( ostream & flux ) const
{
flux << m_heures << " h " << m_minutes << " m " << m_secondes << " s " ;
}
// Dans m a i n D u r e e . cpp
Duree duree3 (2 , 25 , 28) , duree4 (0 , 16 , 33);
cout << duree4 << " et " << duree3 << endl ;

Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

52 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Surcharge doprateurs de comparaisons


POO C++
Y. Morre
Introduction
La POO
Les secret de string

Exemple : Oprateur ==

Les classes
Crer une classe
Droits daccs en
encapsulation

Sans doute le plus utilis ;

Sparation
prototypes et
dfinitions

Test dgalit de 2 objets ;


Il faut donc crire la fonction qui teste lgalit de vos objets ;

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Suivant la logique que vous avez dfinie (lordinateur ne peut la


deviner).
Ce type doprateur renvoie un boolen (bool).

Surcharge
doprateurs
Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

53 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Surcharge doprateurs de comparaisons


POO C++

Implmentation doperator==

Y. Morre
Introduction
La POO
Les secret de string

Les classes
Crer une classe
Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

bool operator ==( Duree const & a , Duree const & b )


{
// Teste si a . m_heure == b . m_heure etc .
if ( a . m_heures == b . m_heures && a . m_minutes == b . m_minutes
&& a . m_secondes == b . m_secondes )
return true ;
else
return false ;
}

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Surcharge
doprateurs

Mthode
On compare chaque fois un attribut de lobjet dans lequel on se
trouve avec un attribut de lobjet de rfrence

Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

Mme Problme
Fonction externe la classe. Ne compile pas ! pas daccs aux
attributs ;
-> comme prcdemment on passe par une mthode de la classe.

54 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Surcharge doprateurs de comparaisons


POO C++

Implmentation doperator==

Y. Morre
Introduction
La POO
Les secret de string

Les classes
Crer une classe
Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

bool operator ==( Duree const & a , Duree const & b )


{
// Teste si a . m_heure == b . m_heure etc .
if ( a . m_heures == b . m_heures && a . m_minutes == b . m_minutes
&& a . m_secondes == b . m_secondes )
return true ;
else
return false ;
}

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Surcharge
doprateurs

Mthode
On compare chaque fois un attribut de lobjet dans lequel on se
trouve avec un attribut de lobjet de rfrence

Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

Mme Problme
Fonction externe la classe. Ne compile pas ! pas daccs aux
attributs ;
-> comme prcdemment on passe par une mthode de la classe.

54 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Surcharge doprateurs de comparaisons


POO C++

Implmentation doperator==

Y. Morre
Introduction
La POO
Les secret de string

Les classes
Crer une classe
Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

bool operator ==( Duree const & a , Duree const & b )


{
// Teste si a . m_heure == b . m_heure etc .
if ( a . m_heures == b . m_heures && a . m_minutes == b . m_minutes
&& a . m_secondes == b . m_secondes )
return true ;
else
return false ;
}

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Surcharge
doprateurs

Mthode
On compare chaque fois un attribut de lobjet dans lequel on se
trouve avec un attribut de lobjet de rfrence

Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

Mme Problme
Fonction externe la classe. Ne compile pas ! pas daccs aux
attributs ;
-> comme prcdemment on passe par une mthode de la classe.

54 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Surcharge doprateurs de comparaisons


POO C++

Implmentation doperator==

Y. Morre
Introduction
La POO
Les secret de string

Les classes
Crer une classe
Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Surcharge
doprateurs
Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

55 / 59

// Dans Duree . h
// Dans la classe
bool estEgal ( Duree const & b ) const ;
// A l ext rieur
bool o perator ==( Duree const & a , Duree const & b );
// Dans Duree . cpp
bool Duree :: estEgal ( Duree const & b ) const {
// Teste si a . m_heure == b . m_heure etc .
if ( m_heures == b . m_heures && m_minutes == b . m_minutes
&& m_secondes == b . m_secondes )
return true ;
else
return false ;
}
bool operator ==( Duree const & a , Duree const & b ){
return a . estEgal ( b );
}
Dans mainDuree . cpp
Duree duree5 (0 , 10 , 28) , duree6 (0 , 10 , 28);
if ( duree5 == duree6 )
cout << " Les durees sont identiques \ n " ;
else
cout << " Les durees sont differentes \ n " ;

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Surcharge doprateurs de comparaisons


POO C++
Y. Morre
Introduction
La POO
Les secret de string

Implmentation doperator!=

Les classes
Crer une classe
Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

// Fichier Duree . h
bool operator !=( Duree const & a , Duree const & b );
// Fichier Duree . cpp
bool operator !=( Duree const & a , Duree const & b )
{
if ( a == b ) // On utilise l op rateur == qu on a d fini pr c demment
return false ; // S ils sont gaux , alors ils ne sont pas diff re
else
return true ; // Et s ils ne sont pas gaux , c est qu ils sont di
}

Surcharge
doprateurs
Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

56 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Surcharge doprateurs de comparaisons


POO C++
Y. Morre

Implmentation doperator<

Introduction
La POO
Les secret de string

Les classes
Crer une classe
Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Surcharge
doprateurs
Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques

bool operator <( Duree const &a , Duree const & b ) {


if ( a . estPlu sP et it Qu e ( b ))
return true ;
else
return false ;
}
bool Duree :: estP lu s Pe ti tQ u e ( Duree const & b ) const {
if ( m_heures < b . m_heures )
return true ;
else if ( m_heures == b . m_heures && m_minutes < b . m_minutes )
return true ;
else if ( m_heures == b . m_heures && m_minutes == b . m_minutes
&& m_secondes < b . m_secondes )
return true ;
else
return false ;
}

Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

57 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Bibliographie/Webographie
POO C++
Y. Morre
Introduction
La POO
Les secret de string

Sources
Systmes et Technologies Objet
http://casteyde.christian.free.fr/

Les classes
Crer une classe
Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Cours dEric Lecolinet


http://perso.telecom-paristech.fr/~elc/cpp

Constructeur /
Destructeur
Constructeur

Wikipediahttp://fr.wikipedia.org

Destructeur
Mthodes constantes
Interaction entre
classes

Openclassrooms http://fr.openclassrooms.com/
Cppreference http://www.cplusplus.com/reference/

Surcharge
doprateurs
Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

58 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

Evolution
POO C++
Y. Morre
Introduction
La POO
Les secret de string

Les classes
Crer une classe
Droits daccs en
encapsulation
Sparation
prototypes et
dfinitions

Constructeur /
Destructeur
Constructeur
Destructeur
Mthodes constantes
Interaction entre
classes

Surcharge
doprateurs
Introduction
Classe Duree
Surcharge
doprateurs
arithmtiques
Surcharge
doprateurs de flux
Surcharge
doprateurs de
comparaisons

Bibliographie /

59 / 59

C++ et Programmation Oriente Objet : Objets, classes et surcharge Y. Morre 2013

S-ar putea să vă placă și