Académique Documents
Professionnel Documents
Culture Documents
Classes et POO
Sommaire
Chapitre 11 – Classes et POO
• Le pointeur this et les fonctions membres constantes
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
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
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
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
3
Programmation C++ 07/09/2017
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
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
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
• 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
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
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
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
• 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
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
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
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
• 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
• 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
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
• 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 };
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
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
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
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
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
• 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
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
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
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
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
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
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
• 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
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
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
Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley
18