Vous êtes sur la page 1sur 27

Apprentissage et Pratique des langages C et C++

par la pratique
(Support du cours – Niveau Licence Informatique)

Par
El Hassan Abdelwahed - Département d’Informatique
Faculté des Sciences Semlalia Marrakech
Université Cadi Ayyad
Du C vers C++ : Commentaires et Fonctions en ligne

Introduction au langage C++ - Par El Hassan Abdelwahed – Département d’Informatique – FSSM – UCAM
Du C vers C++ : Références

Introduction au langage C++ - Par El Hassan Abdelwahed – Département d’Informatique – FSSM - UCAM
Du C vers C++ : Arguments par défaut

Introduction au langage C++ - Par El Hassan Abdelwahed – Département d’Informatique – FSSM - UCAM
Du C vers C++ : Recouvrement (ou surcharge) des fonctions

Introduction au langage C++ - Par El Hassan Abdelwahed – Département d’Informatique – FSSM - UCAM
Du C vers C++ : Déclaration de variables et de constantes

Introduction au langage C++ - Par El Hassan Abdelwahed – Département d’Informatique – FSSM - UCAM
Du C vers C++ : Gestion dynamique de la mémoire

Introduction au langage C++ - Par El Hassan Abdelwahed – Département d’Informatique – FSSM - UCAM
Du C vers C++ : Les entrées et sorties

Introduction au langage C++ - Par El Hassan Abdelwahed – Département d’Informatique – FSSM - UCAM
Langage C++ : Les classes & Encapsulation

class <Nom de la classe>


{
Définition des données de la classe
Déclaration (ou définition en ligne) des fonctions (méthodes) de la classe
}
Définitions (en aval) des fonctions (méthodes) de la classe

La classe permet de réunir en une seule structure les données et fonctions


(méthodes) qui les manipulent ainsi que les droits d’accès aux membres (données
et méthodes) de la classe.
En général, les méthodes (fonctions) d’une classe sont déclarées dans la classe et
définies en dehors (en aval) de la définition de la classe. Lors de la définition
d’une méthode, le nom de celle-ci est précédé du nom de la classe suivi de
l’opérateur de résolution de porté (::). Ces méthodes peuvent être déclarées en
ligne par le mot clé inline.
<inline> <type> <nom classe> :: <nom méthode> <liste arguments>
{ Corps de la méthode }
Remarques:
En C++, les classes et les structures sont en tout point identiques sauf pour les droits
d’accès à leurs membres: les droits d’accès pour les membres d’une structure sont publics
(public) tandis que les membres d’une classe sont privés (private) par défaut.

Introduction au langage C++ - Par El Hassan Abdelwahed – Département d’Informatique – FSSM - UCAM
Langage C++ : Instances (objets) d’une classe & Accès aux membres

En créant une classe, on définit un type <nom classe> et on peut donc déclarer une
instance (objet) de cette classe de la manière suivante:

<nom classe> <nom instance> ;

On accède aux membres (données ou méthodes) d’une classe des deux manières
suivantes:

<nom d’une instance de la classe> . < nom donnée ou méthode de la classe>

<pointeur sur une instance de la classe> -> < nom donnée ou méthode de la classe>

Introduction au langage C++ - Par El Hassan Abdelwahed – Département d’Informatique – FSSM - UCAM
Langage C++ : Droits d’accès aux membres d’une classe

Il existe trois modes définissant les droits d’accès aux membres (données et
méthodes) d’une classe :
public
Les méthodes et (plus rarement) les données qui sont déclarées publics sont
accessibles par toutes les méthodes de la classes ainsi que les autres fonctions non
membres de la classe.

private

Les méthodes et les données d’une classe qui sont déclarés comme étant privés ne
sont accessibles que par les méthodes membres de la classe, et en aucun par les
fonctions extérieures à cette classe.

protected

Les méthodes et les données d’une classe qui sont déclarés comme étant protégés
ne sont accessibles que par les méthodes membres des classes dérivées ( notion
héritage).

Remarques:
- Une classe doit contenir au moins un membre publique.
- D’une manière générale, les membres données sont très souvent déclarés privés (private) et
les membres méthodes publiques (public).

Introduction au langage C++ - Par El Hassan Abdelwahed – Département d’Informatique – FSSM - UCAM
Langage C++ : Les Classes (Exemple)

Introduction au langage C++ - Par El Hassan Abdelwahed – Département d’Informatique – FSSM - UCAM
Langage C++ : Constructeur(s) et destructeur d’une classe

Chaque classe possède au moins un constructeur et un seul destructeur.


Constructeur(s)
Un constructeur est une méthode de la classe qui a le même nom que la classe
et ne retourne aucun résultat (même pas void).
Les constructeurs sont appelés (automatiquement) lors de la déclaration d’une
instance (objet) de la classe: création de cette instance (allocation de la place
mémoire, etc.) et pour initialiser les membres données de l’instance.
Lorsqu’il y a plusieurs constructeurs dans la classe, le choix du constructeur
appelé se fait en fonction des arguments (recouvrement).
S’il n’y pas aucun constructeur défini dans une classe, C++ en crée un
automatiquement qui est un constructeur par défaut (et qui ne fait rien).
Destructeur
Un destructeur est une méthode de la classe qui a le même nom que la classe
précédé du symbole tilde (~). Le destructeur d’une classe ne retourne aucun
résultat et n’admet aucun argument (et il ne peut pas être donc surchargé).
Le destructeur d’une classe est (automatiquement) appelé lors de la destruction
d’une instance de la classe (restitution de la place mémoire, etc.).
Un destructeur implicite existe toujours pour une classe lorsqu’on n’en a pas
défini un explicitement.
Mais un destructeur explicite est nécessaire pour effectuer certaines opérations
comme la restitution de la place mémoire auparavant allouée lors de la
construction d’une instance dans le cas où la classe possède des membres
données utilisant de la place mémoire (pointeurs).

Introduction au langage C++ - Par El Hassan Abdelwahed – Département d’Informatique – FSSM - UCAM
Langage C++ : Constructeur(s) & Destructeur (Exemple I)

Introduction au langage C++ - Par El Hassan Abdelwahed – Département d’Informatique – FSSM - UCAM
Langage C++ : Les Classes (Exemple)

Point.prj

point.h

point.cpp

princ.cpp

Introduction au langage C++ - Par El Hassan Abdelwahed – Département d’Informatique – FSSM - UCAM
Langage C++ : Constructeur(s) & Destructeur (Exemple II)

Introduction au langage C++ - Par El Hassan Abdelwahed – Département d’Informatique – FSSM - UCAM
Langage C++ : Héritage (réutilisation)

L’héritage permet de réutiliser des classes existantes, appelées classes de


base, dans de nouvelles applications.

L’héritage permet de définir une nouvelle classe, dite classe dérivée, en


ajoutant des membres spécifiques (données et/ou méthodes) à la classe de
base existante. Ceci tout en conservant les données et les fonctions
(éventuellement surchargées) de la classe de base.

Une classe peut hériter d’une seule classe de base (héritage simple) ou de
plusieurs classes de base (héritage multiple).

A La classe A est la classe de base des


classes dérivées C et D.
La classe D hérite seulement de la classe
B C D A (Héritage simple)
La classe E hérite des deux classes de
E base B et C (héritage multiple)

Introduction au langage C++ - Par El Hassan Abdelwahed – Département d’Informatique – FSSM - UCAM
Langage C++ : Héritage

La définition d’une classe dérivée d’une classe de base se fait de la manière


suivante (héritage simple):

class <nom classe dérivée> : <modificateur accès> <nom classe de base>


{ Déclaration des membres (données et méthodes) de la classes dérivée }
Définitions des méthodes de la classe dérivée

Pour un héritage multiple, la définition de la classe dérivée se fait comme


suite:

class <nom classe dérivée> : <modificateur accès I> <nom classe de base I>,
<modificateur accès II> <nom classe de base II>,
....
<modificateur accès N> <nom classe de base N>,
{ Déclaration des membres (données et méthodes) de la classes dérivée }
Définitions des méthodes de la classe dérivée

Introduction au langage C++ - Par El Hassan Abdelwahed – Département d’Informatique – FSSM - UCAM
Langage C++ : Héritage & Modificateur d’accès

Il existe deux modificateurs d’accès: public et private. Par défaut, si on ne met


de modificateur d’accès, une classe dérive de manière privée (et une structure de
manière publique).
Les modificateurs d’accès influent sur les droits d’accès des membres hérités:

Classe de base Modificateur d’accès Classe dérivées

public public public

public private private

protected public protected

protected private private

private public non accessible

private private non accessible

Introduction au langage C++ - Par El Hassan Abdelwahed – Département d’Informatique – FSSM - UCAM
Langage C++ : Héritage, Gestion des constructeurs et des destructeurs

Lorsque la classe de base possède un constructeur par défaut, celui ci est appelé
automatiquement avant l’appel du constructeur de la classe dérivée.

Cependant, un constructeur de la classe dérivée peut faire un appel explicit à un


constructeur de la classe de base :
<classe dérivée> :: <classe dérivée> <Liste arguments> :
<classe base><Liste arguments>
Le destructeur d’une classe dérivée appelle le destructeur de la classe de base
après de ses tâches explicites:
<classe dérivée> :: ~<classe dérivée>
{
Exécution des tâches explicites du destructeur de la classe dérivée
// Appel implicite du destructeur de la classe de base
}
En fait, les constructeurs sont appelés dans l’ordre ascendant des classes (de
base vers dérivées), tandis que les destructeurs le sont dans l’ordre inverse.

Introduction au langage C++ - Par El Hassan Abdelwahed – Département d’Informatique – FSSM - UCAM
Langage C++ : Héritage (Exemple)

Classe
Point

Classe
PointColore

Introduction au langage C++ - Par El Hassan Abdelwahed – Département d’Informatique – FSSM - UCAM
Langage C++ : Fonctions virtuelles

Introduction au langage C++ - Par El Hassan Abdelwahed – Département d’Informatique – FSSM - UCAM
Langage C++ : Fonctions virtuelles

Introduction au langage C++ - Par El Hassan Abdelwahed – Département d’Informatique – FSSM - UCAM
Langage C++ : Fonctions Amies

Une fonction amie (friend) d’une classe est une fonction qui n’est pas
membre de cette classe mais qui peut accéder à ses membres privées au
même titre qu’une méthode de cette classe.

Introduction au langage C++ - Par El Hassan Abdelwahed – Département d’Informatique – FSSM - UCAM
Langage C++: Méthodes Amies

De même, une méthode d’une classe A peut accéder aux membres privés d’une
autre classe B. Pour cela, il suffit de déclarer cette méthode comme étant amie
(friend) de la classe B. Ceci en utilisant son nom complet (A:: Méthode):

class A {
// Membres de la classe A
void LamethodeAmie( void );
}

class B {
// Membres privés de la classe B
friend void A::LamethodeAmie( void );
}

void A::LamethodeAmie( void ){


// Utilisation des membres privés de la classe B
}

Introduction au langage C++ - Par El Hassan Abdelwahed – Département d’Informatique – FSSM - UCAM
Langage C++: Classes Amies

Lorsqu’on souhaite que tous les membres d’une classe A puissent accéder aux
membres privés d’une autre classe B, alors on déclare A comme une classe amie
de B. Dans ce cas, toutes les méthodes de la classe A peuvent accéder aux
membres privés de la classe B :

class A {
// Membres de la classe A

class B {
// Membres privés de la classe B
friend class A;
}

Remarques:
L’utilisation d’amies doit être exceptionnelle car une généralisation de son usage
dénote souvent une mauvaise structure au sein de la hiérarchie de vos classes.

Introduction au langage C++ - Par El Hassan Abdelwahed – Département d’Informatique – FSSM - UCAM
Langage C++: Surcharge des opérateurs

En C++, on peut non seulement surcharger des fonctions mais aussi des
opérateurs standards (*, -, +, &, etc.). C’est à dire que l’on peut modifier (adapter)
le comportement de ces opérateurs.

Introduction au langage C++ - Par El Hassan Abdelwahed – Département d’Informatique – FSSM - UCAM

Vous aimerez peut-être aussi