Vous êtes sur la page 1sur 18

Programmation C++ 07/09/2017

Classes et POO
Sommaire
Chapitre 11 – Classes et POO
• Le pointeur this et les fonctions membres constantes

Programmation C++ • Les membres static

• Les amies (Friends) des Classes

• Affectaion membre à membre


Par • Constructeur par copie
Siaka Fofana
fsiaka@hotmail.com • Surcharge des opérateurs
Laboratoire des Signaux et Systèmes
• Les opérateurs de conversionde type

• Les constructeurs de conversion


Copyright
Copyright ©© 2017
2014, Siaka
2008 Fofana,
Pearson Laboratoire
Education, des Signaux
Inc. Publishing et Systèmes.
as Pearson Université FHB Côte d’Ivoire
Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

Classes et POO Classes et POO


Sommaire Le pointeur this et les fonctions membres constantes
• Aggrégation et composition

• Héritage • Le pointeur this:


- paramètre implicite passé à une fonction membre
• Membres protected et accès à la classe - pointe sur l’objet appelant la fonction

• Constructeurs, destructeurs et héritage


• Fonction membre const:
• Redéfinition des fonctions de la classe de base - ne modifie pas son objet appelant

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

1
Programmation C++ 07/09/2017

Classes et POO Classes et POO


Le pointeur this et les fonctions membres constantes Le pointeur this et les fonctions membres constantes
Utilisation du pointeur this Fonctions membres constantes

Peut être utilisé pour accéder aux membres qui • Une fonction membre constante est déclarée avec le mot
pourraient être cachés par les paramètres de même clé const
nom:
• Lorsque const apparaît dans la liste de paramètres,
class UneClasse
int setNombre (const int nombre)
{
private: il est interdit à la fonction de modifier le paramètre.
int nombre; Le paramètre est "read-only".
public:
void setNombre(int nombre)
{ this->nombre = nombre; }
• Lorsque const suit la liste de paramètres,
}; int getX()const
il est interdit à la fonction de modifier l’objet.

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

Classes et POO Classes et POO


Les membres static Les membres static
Variables membres static
• Variable membre static:
1) Doivent être déclarées dans la classe avec le mot clé
– Une seule instance de cette variable pour la classe static:
entière
class IntVal
– Partagée par tous les objets de la classe {
public:
intVal(int val = 0)
• Fonction membre static: { valeur = val; compteurVal++ }
– Peut être utilisée pour accéder aux variables int getVal();
membres static void setVal(int);
private:
– Peut être appelée avant toute creation d’objet de la int valeur;
classe static int compteurVal;
};

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

2
Programmation C++ 07/09/2017

Classes et POO Classes et POO


Les membres static Les membres static
Variables membres static Variables membres static

2) Doivent aussi être déclarées (avec initialisation) hors 3) Peuvent être accédées ou modifiées par tout objet de la
classe: les modifications effectuées par un objets sont
de la classe: visibles par tous les objets:
class IntVal IntVal val1, val2;
{
//Déclaration dans la classe
compteurVal
static int compteurVal;
//autres membres non présentés val1 2 val2
};
//Déclaration hors de la classe
int IntVal::compteurVal = 0;

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

Classes et POO Classes et POO


Les membres static Les membres static
Fonctions membres static Fonctions membres static
2) Une fonction membre static Peut être appelés
1)Déclarées avec le mot clé static placé avant le type indépendamment des objets de la classe, via le nom de la
classe:
de retour:
cout << IntVal::getCompteurVal();
class IntVal
{ 3) Le ponteur this ne peut pas être utilisé avec une fonction
public: membre static à cause du point 2 (précédent)
static int getCompteurVal()
{ return compteurVal; }
private: 4) Une fonction membre static peut être appelée avant
int valeur; création de tout objet de la classe
static int compteurVal;
};
5) Utilisée principalement pour manipuler les variables
membres static de la classe
Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

3
Programmation C++ 07/09/2017

Classes et POO Classes et POO


Les amies (friends) des classes Les amies (friends) des classes
Déclaration d’une fonction friend
• Fonction friend: une fonction qui n’est pas membre
d’une classe mais qui a accès aux membres privat 1) Une fonction friend peut être une fonction isolée:
de cette classe
class uneClasse
{
• Une fonction friend peut être une fonction isolée ou private:
une fonction membre d’une autre classe int x;
friend void fSet(uneClasse &c, int a);
};
• Elle est déclarée friend de la classe avec le mot clé void fSet(uneClasse &c, int a)
friend dans le prototype de la fonction {
c.x = a;
}

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

Classes et POO Classes et POO


Les amies (friends) des classes Les amies (friends) des classes
Déclaration d’une fonction friend Déclaration d’une classe friend
2) Une fonction friend peut être un membre d’une autre 3) Une classe entière peut être déclarée friend d’une autre
classe: classe:
class uneClasse class uneClasse
{ {
private: private:
int x; int x;
friend void uneAutreClasse::fSet(uneClasse &c, int a); friend class classeAmie;
}; };

class uneAutreClasse class classeAmie


{ {
public: public:
void fSet(uneClasse &c, int a) void fSet(uneClasse &c,int a){c.x = a;}
{ c.x = a; } int fGet(uneClasse c){return c.x;}
}; };

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

4
Programmation C++ 07/09/2017

Classes et POO Classes et POO


Les amies (friends) des classes Affectation membre à membre
Déclaration d’une classe friend
• On peut utiliser = pour affecter un objet à une autre objet
• Si classeAmie est une friend de uneClasse, alors ou pour initialiser un objet avec les données d’un autre
toutes les fonctions membres de classeAmie ont un objet
accès non restrictif à tous les membres de uneClasse,
y compris les membres privat.
• Exemples (en supposant une classe V):

• On restraint, en général, la propriéte de fraternité (lien V v1, v2;


par la relation friend) au seules fonctions qui ont accès … // instructions qui affectent
aux membres privat d’une classe. … // des valeurs aux membres de v1
v2 = v1; // affectation
V v3 = v2; // initialisation

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

Classes et POO Classes et POO


Constructeur par copie Constructeur par copie

• Un constructeur spécial utilisé lorsqu’un nouvel objet, en Des problèmes surviennent lorsque les objets contiennent
création, est initialisé par les données d’un autre objet de des pointeurs vers des stockages dynamiques:
la même classe
class ClasseCp
{
• Un constructeur par copie par défaut fait une copie champ private:
vers champ en utilisant l’affectation membre à membre int *p;

public:
• Le constructeur par copie par défaut fonctionne avec ClasseCp(int v=0)
{ p = new int; *p = v;}
subtilité dans beaucoup de cas
~ClasseCp(){delete p;}
};

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

5
Programmation C++ 07/09/2017

Classes et POO Classes et POO


Constructeur par copie Constructeur par copie
Problème de partage de l’espace de stockage Problème de partage de l’espace de stockage

ClasseCp c1(5);
if (true) • Le destructeur d’un objet détruit la mémoire en cours
{ c1 utilisation par d’autres objets
ClasseCp c2=c1;
} 5
// c1 est corrompu • Une modification de la mémoire par un objet affecte les
// lorsque c2 quitte autres objets partageant cette mémoire
// la portée et c2
// son destructeur
// s’exécute

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

Classes et POO Classes et POO


Constructeur par copie Constructeur par copie
Constructeurs par copie définis par le programmeur Constructeurs par copie définis par le programmeur
• Un constructeur par copie évite les problèmes poses
par le partage de la mémoire
• Un constructeur par copie prend comme paramètre une
référence sur un autre objet de la même classe
• On peut allouer de la mémoire à part pour contenir les
• Le constructeur par copie utilise les données de l’objet données membres dynamique du nouvel objet
passé comme paramètre pour initialiser l’objet en
création
• On peut faire en sorte que le pointeur du nouvel objet
pointe sur cette mémoire
• Le paramètre référence devra être const pour éviter
une éventuelle corruption
• Il copie les données, pas le pointeur, de l’objet d’origine
vers le nouvel objet

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

6
Programmation C++ 07/09/2017

Classes et POO Classes et POO


Constructeur par copie Constructeur par copie
Constructeurs par copie définis par le programmeur Utilisation des constructeurs

class ClasseCp Un constructeur par copie est appelé lorsque


{
int *p; • Un objet est initialisé à partir d’un objet de la même
public:
ClasseCp(const ClasseCp &obj)
classe
{ p = new int; *p = *obj.p; }
ClasseCp(int v=0) • Un objet est passé par valeur à une fonction
{ p = new int; *p = v; }
~ClasseCp(){delete p;}
};
• Un objet est retouné en utilisant une instruction return
à partir de la fonction

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

Classes et POO Classes et POO


Surcharge des opérateurs Surcharge des opérateurs

• Les opérateurs tels que =, + et autres peuvent être redéfinis • Un opérateur peut être surchagé en tant que
pour pouvoir les utiliser avec les objets des classes - fonction membre d’une instance ou
- fonction friend
• Le nom de la fonction de l’opérateur surchargé est
operator suivi par le symbole de l’opérateur; ex.
• L’opérateur surchargé doit avoir le même nombre de
operator+ est l’opérateur + surchargé et
paramètres que la version standard. Par exemple,
operator= est l’opérateur = surchargé l’opérateur operator= doit avoir deux paramètres,
puisque l’opérateur = standard prend deux paramètres.

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

7
Programmation C++ 07/09/2017

Classes et POO Classes et POO


Surcharge des opérateurs Surcharge des opérateurs
Surcharge d’un opérateur en tant membre d’une instance Surcharge d’un opérateur en tant membre d’une instance

Un opérateur binaire qui surchargé en tant que membre • L’opérande de gauche de l’opérateur binaire surchargé
d’une instance a besoin d’un seul paramètre; celui qui est l’objet appelant
représente l’opérande de droite:
class ClasseOp
{ • Le paramètre de gauche implicite est accédé via le
private: pointeur this
int x;
public: ClasseOp ClasseOp::operator+(ClasseOp d)
ClasseOp operator+(ClasseOp aDroite); {
}; ClasseOp somme;
somme.x = this->x + d.x;
return somme;
}

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

Classes et POO Classes et POO


Surcharge des opérateurs Surcharge des opérateurs
Invocation d’un opérateur surchargé Surcharge de l’affectation

• La surcharge de l’opérateur d’affectation résoud les


• L’opérateur peut être invoqué en tant que fonction problèmes d’affectation entre objets lorsqu’un objet
membre: contient un poniteur vers une mémoire dynamique.
ClasseOp a, b, s;
s = a.operator+(b);
• L’opérateur d’affectation est plus naturellement surchargé
en tant que fonction membre d’instance
• Il peut aussi être invoqué d’une plus conventionnelle:
• Il doit retourner une valeur de l’objet affecté pour
permettre les affectations en cascade tels que
ClasseOp a, b, s;
a = b = c;
s = a + b;

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

8
Programmation C++ 07/09/2017

Classes et POO Classes et POO


Surcharge des opérateurs Surcharge des opérateurs
Surcharge de l’affectation Surcharge de l’affectation

L’affectation surchargée en tant que fonction membre: L’implémentation retourne une valeur:
ClasseCp ClasseCp::operator=(ClasseCp d)
class ClasseCp {
{ *p = *d.p;
int *p; return *this;
public: };
ClasseCp(int v=0)
{ p = new int; *p = v;
~ClasseCp(){delete p;} Invocation de l’opérateur d’affectation:
ClasseCp operator=(ClasseCp);
}; ClasseCp a, x(45);
a.operator=(x); // l’une de ces deux
a = x; // lignes peut être utilisée

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

Classes et POO Classes et POO


Surcharge des opérateurs Surcharge des opérateurs
Surcharge de l’affectation Types de surcharge des opérateurs

• La surcharge peut modifier entièrement la signification • Les opérateurs ++, -- surchargés différemment
d’un opérateur pour les notations préfixe et postfixe

• Les opérateurs relationnelles doivent retourner une


• Beaucoup d’opérateurs peuvent être surchargés valeur bool

• On ne peut pas changer le nombre d’opérandes de • Les opérateurs de flot (stream) surcharges >>, <<
l’opérateur doivent retourner des objets istream, ostream et
doivent prendre des objets istream, ostream
comme paramètres
• On ne peut surcharger les opérateurs suivants:
?: . .* sizeof

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

9
Programmation C++ 07/09/2017

Classes et POO Classes et POO


Surcharge des opérateurs Opérateurs de conversion de type
Opérateur [] surchargé
• Un opérateur de conversion est une fonction membre qui
• Peut être utilisé pour créer une classe qui se indique au compliateur comment convertir un objet du type
comporte comme un tableau en founissant une d’une classe en une valeur d’un autre type
verifications des bornes sur les index
• Les informations de conversion fournies par un opérateur
• [] surchargé retourne une référence sur l’obet et de conversion sont automatiquement utilisées par le
compilateur lors des affectations, des initialisations et des
non l’objet lui-même passages de paramètres

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

Classes et POO Classes et POO


Opérateurs de conversion de type Opérateurs de conversion de type
Syntaxe des opérateurs de conversion Syntaxe des opérateurs de conversion

• Un opérateur de conversion doit être une fonction • Pour convertir une classe IntVal en un int:
membre de la classe à convertir class IntVal
{
int x;
• Le nom de l’opérateur est le nom classe convertie public:
IntVal(int a = 0){x = a;}
operator int(){return x;}
• L’opérateur ne spécifie pas un type de retour };

• Conversion automatique pendant l’affectation


IntVal obj(15); int i;
i = obj; cout << i; // affiche 15

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

10
Programmation C++ 07/09/2017

Classes et POO Classes et POO


Constructeurs de conversion Constructeurs de conversion

Un constructeur de conversion est un constructeur


qui prend un seul paramètre d’un type autre que La classe string de C++ a un constructeur de
celui de la classe dans laquelle il est défini conversion qui convertit les C-strings en string :

class string
class CCClass
{
{ int x;
public:
public:
string(char *); //conversion
CCClass() // par defaut

CCClass(int a, int b);
};
CCClass(int a); // conversion
CCClass(string s); // conversion
};

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

Classes et POO Classes et POO


Constructeurs de conversion Constructeurs de conversion
Utilisations des constructeurs de conversion
• Ils sont automatiquement invoqués par le compilateur
La classe string de C++ a un constructeur de pour créer un objet à partir d’une valeur passée comme
conversion qui convertit les C-strings en string : paramètre:
string s("bonjour"); //conversion d’un C-string
class string CCClass obj(24); //conversion d’un int
{
public:
string(char *); //conversion
• Le compilateur permet l’invocation d’un constructeur de

conversion par la notation affectation:
};
string s = "bonjour"; //conversion d’un C-string
CCClass obj = 24; //conversion d’un int

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

11
Programmation C++ 07/09/2017

Classes et POO Classes et POO


Constructeurs de conversion Agrégation et composition
Utilisations des constructeurs de conversion
• Agrégation de classe: Un objet d’une classe possède un
• Un constructeur de conversion permet à une fonction qui objet d’une autre classe
prend le type de la classe comme paramètre de prendre
un paramètre d’un autre type:
• Compositon de classe: Une forme d’agrégation dans
laquelle l’objet englobant contrôle la durée de vie des
void maJoie(string s); // besoin d’un objet objets des classes englobée
// string
maJoie("bonjour"); // accepte un C-string
• Supporte la modélisation de la relation 'a-un’ entre
void maJoie(CCClass c); classe – la classe englobante 'a une' instance de la
maJoie(34); // accepte un int classe englobée

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

Classes et POO Classes et POO


Agrégation et composition Agrégation et composition
Composition d’objets Listes d’initialisation des membres

class InfoEtudiant • Utilisées dans les constructeurs des classes améliorées


{ par agrégation.
private:
string prenom, nom;
string adresse, ville, pays, bp; • Permet au constructeur de la classe englobante de passer
...
des arguments au constructeur de la classe englobée
};
class
class Etudiant
{
private: • Notation:
InfoEtudiant donneesPersonnelles; ClasseEnglobante(parametres):ClasseEnglobee(parametres);
...
};

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

12
Programmation C++ 07/09/2017

Classes et POO Classes et POO


Agrégation et composition Agrégation et composition
Listes d’initialisation des membres Listes d’initialisation des membres

Utilisation: • Les listes d’initialisation peuvent être utilisées pour


simplifier le codage des constructeurs
class InfoEtudiant
{
... • On doit conserver les entrées de la liste d’initialisation
};
dans l’ordre dans leqel elles ont été déclarées dans la
class Etudiant classe
{
private:
InfoEtudiant DonneesPersonnelles;
public:
Etudiant(string unPrenom, unNom):
InfoEtudiant(unPrenom, unNom);
};
Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

Classes et POO Classes et POO


Agrégation et composition Agrégation et composition
Agrégation à travers des pointeurs Agrégation, composition et durée de vie des objets

• Une relation ‘a-un’ peut être implémentée par la • L’agrégation représente la relation possédant/possédé
possession d’un pointeur vers un objet entre les objets.

• Peut être utilisée lorsque plusieurs objets d’une classe • La composition est une forme d’agrégation dans laquelle
peuvent avoir le même attribut comme membre la durée de vie l’objet possédé est la même que celle de
– ex: les étudiants qui ont les mêmes ville/pays/bp l’objet possédant

• L’utilisation des pointeurs minimise les duplications de • L’objet possédé est créé généralement comme faisant
données et preserve l’espace mémoire partie du constructeur de l’objet possédant, détruit comme
faisant partie du destructeur de l’objet possédant

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

13
Programmation C++ 07/09/2017

Classes et POO Classes et POO


Héritage Héritage
Terminologie
• L’héritage est une manière de créer une nouvelle classe
en partant d’une classe existante et en y ajoutant de
nouveaux membres • La classe existante est appelée classe de base
– Autres appelations: classe parent, super classe
• La nouvelle classe peut remplacer ou étendre les
fonctionnalités de la classe existante • La nouvelle classe est appelée classe dérivée
– Autres appelations: classe enfant, sous classe
• L’héritage modélise la realation ‘est-un' entre les classes

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

Classes et POO Classes et POO


Héritage Héritage
Syntaxe et notation Héritage des membres

Diagramme d’heritage class Parent


Les objets de Parent ont
de classe { les membres
// Classe existante
class Base int a; int a; void bf();
{ void bf();
}; };

Classe de Base class Enfant : public Parent


// Classe dérivée Les objets de Enfant ont
class Derivee : public Base { les membres
{ int c;
void df(); int a; void bf();
};
}; int c; void df();
Classe Derivée

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

14
Programmation C++ 07/09/2017

Classes et POO Classes et POO


Les membres protected et accès à la classe Les membres protected et accès à la classe
Spécification des accès à la classe de base

• Spécification des accès aux membres protected: Un


membre de la classe avec le label protected est La spécification des accès à la classe de base détermine
accessible aussi bien par les fonctions membres des comment les membres private, protected et public
classes dérivées que par les fonctions de la même de la classe de base peuvent être accédés par les
classe classes dérivées

• Comme private, sauf que n’est accessible que par


les fonctions membres des classes dérivées

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

Classes et POO Classes et POO


Les membres protected et accès à la classe Les membres protected et accès à la classe
Les accès à la classe de base Accès à la classe de base et spécification d’accès aux
membres

C++ supporte trois modes d’héritage, appelés aussi L’accès à la classe de base n’est pareil à la specification
mode d’accès à la classe de base: de l’accès à un membre d’une classe:
- héritage public – L’accès à la classe de base: détermine l’accès aux membres
hérités
class Enfant : public Parent { };
– Spécification de l’accès à un membre: détermine l’accès à un
- héritage protected membre défini dans la classe
class Enfant : protected Parent{ };
- héritage private
class Enfant : private Parent{ };

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

15
Programmation C++ 07/09/2017

Classes et POO Classes et POO


Les membres protected et accès à la classe Les membres protected et accès à la classe
Spécification d’accès aux membres d’une classe Spécification d’accès à une classe de base

Cette specification est effectuée à l’aide des mots clé


class Enfant : public Parent
private, protected, public {
protected: Accès à la base
int a;
class MaClasse public:
{ Enfant();
private: int a; }; Accès aux membres
protected: int b; void fun();
public: void fun2();
};

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

Classes et POO Classes et POO


Les membres protected et accès à la classe Les membres protected et accès à la classe
Spécificateurs d’accès à une classe de base Effets des accès à une classe de base
Comment les membres de la
Membres de la classe classe de base apparaîssent
1) public – l’objet de la classe dérivée peut être traité de base dans la classe dérivée
comme l’objet de la classe de base (non vice-versa)
private: x Classe de base privat x inaccessible
protected: y private: y
2) protected – plus restrictif que public, mais public: z private: z
permet la classe dérivée de connaître certains details
de la classe de base private: x x inaccessible
Classe de base protected
protected: y protected: y
public: z protected: z
3) private – évite aux objets de la classe dérivivée
d’être traités comme les objets de la classe de base.
private: x Classe de base public x inaccessible
protected: y protected: y
public: z public: z

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

16
Programmation C++ 07/09/2017

Classes et POO Classes et POO


Constructeurs, destructeurs et héritage Constructeurs, destructeurs et héritage
Ordre d’exécution

• Par l’heritage de tous les membres de la classe de • Lorsqu’un objet d’une classe dérivée est créé le
base, un objet d’une classe dérivée contient un objet de constructeur de la classe de base est exécuté en premier,
suivi par le constructeur de la classe dérivée
la classe de base

• Le constructeur de la classe dérivée peut spécifier • Lorsqu’un objet d’une classe dérivée est détruit son
lequel des constructeurs de la classe de base devra destructeur est appelé en premier puis suivi par celui de la
être utilisé pour initialiser l’objet de la classe de base classe de base

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

Classes et POO Classes et POO


Constructeurs, destructeurs et héritage Constructeurs, destructeurs et héritage
Ordre d’exécution Passage d’arguments au constructeur de la classe de base

// Etudiant – classe de base • Permet la sélection parmi plusieurs constructeurs de la


// EtudiantEnLicence – classe dérivée classe de base
// Ont toutes des constructors, destructors
int main()
{ Exécute le constructeur de • Spécifier les arguments à passer au constructeur de la
EtudiantEnLicence el1; Etudiant, puis exécutle classe de base dans le header du constructeur de la
constructeur de
... EtudiantEnLicence classe dérivée
return 0;
}// fin de main
• Peut aussi être réalisé avec les constructeurs inline
Exécute le destructeur de
EtudiantEnLicence, puis
exécute le destructeur de • Doit être effectué si la classe de base n’a pas de
Etudiant constructeur par défaut

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

17
Programmation C++ 07/09/2017

Classes et POO Classes et POO


Constructeurs, destructeurs et héritage Redéfinition des méthodes de la classe de base
Passage d’arguments au constructeur de la classe de base

class Parent • Redéfinition: méthode de la classe dérivée ayant le


{ même nom et la même liste de paramètres qu’une
int x, y; méthode de la classe de base
public:
Parent(int,int);
}; • Généralement utilisé pour remplacer une méthode de la
classe de base avec différentes actions dans une classe
class Enfant : public Parent dérivée
{
int z
public: • N’est pas pareille à une surcharge – avec une
Enfant(int a): Parent(a,a*a)
surcharge les listes des paramètres doit être différentes
{z = a;}
};

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

Classes et POO
Redéfinition des méthodes de la classe de base
Accès aux méthodes redéfinies

• Lorsqu’une méthode est redéfinie tous les objets de la


classe dérivée utilisent la méthode redéfinie.

• Au où l’on veut nécessairement accéder à la méthode de


la classe de base on peut utiliser l’opérateur de
resolution de portée avec la classe de base et nom de la
fonction:
Etudiant::getNom();

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

18

Vous aimerez peut-être aussi