ELy-Cours-C++ 04 2 2021-2022

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 23

17/10/2021

Université Ibn Zohr Agadir Année universitaire: 2021-2022


Ecole Nationale des Sciences Appliqué Section: ENSA -3
Département: Génie Informatique Module: Programmation C++
Responsable: Prof. A. Elyousfi

Abderrahmane ELYOUSFI Département


elyousfiabdo@yahoo.fr Génie Informatique

Les propriétés des fonctions membres

Abderrahmane ELYOUSFI ENSA (GII) C++ 2

1
17/10/2021

Plan
1. Surdéfinition des fonctions membres
2. Arguments par défaut
3. Les fonctions membres en ligne
4. Cas des objets transmis en argument d’une fonction membre
5. Mode de transmission des objets en argument
6. Lorsqu’une fonction renvoie un objet
7. Autoréférence : le mot clé this
8. Les fonctions membres statiques
9. Les fonctions membres constantes
10. Les membres mutables

Abderrahmane ELYOUSFI ENSA (GII) C++ 3

Introduction

Abderrahmane ELYOUSFI ENSA (GII) C++ 4

2
17/10/2021

 Nous allons étudier un peu plus en détail l’application aux


fonctions membres des possibilités offertes par C++:
surdéfinition, arguments par défaut, fonction en ligne,
transmission par référence...

Abderrahmane ELYOUSFI ENSA (GII) C++ 5

Surdéfinition des fonctions


membres

Abderrahmane ELYOUSFI ENSA (GII) C++ 6

3
17/10/2021

Nous avons déjà vu comment C++ nous autorise à surdéfinir les


fonctions ordinaires.

Cette possibilité s’applique également aux fonctions membres


d’une classe, y compris au constructeur (mais pas au destructeur
puisqu’il ne possède pas d’argument).

Abderrahmane ELYOUSFI ENSA (GII) C++ 7

Abderrahmane ELYOUSFI ENSA (GII) C++ 8

4
17/10/2021

Surdéfinition d’une fonction

Le statut privé ou public d’une fonction membre n’intervient


pas dans la surdéfinition des fonctions membres.

L’algorithme recherche de la meilleure fonction, et ceci,


indépendamment de leur statut (public ou privé), conclut alors que
f(char) est la meilleure fonction et qu’elle est unique.

si f(char) est définie publique, elle serait bien appelée par a.f(c) ;
si f(char) n’est pas définie du tout, a.f(c) appellerait f(int).

Abderrahmane ELYOUSFI ENSA (GII) C++ 9

Abderrahmane ELYOUSFI ENSA (GII) C++ 10

5
17/10/2021

Arguments par défaut

Abderrahmane ELYOUSFI ENSA (GII) C++ 11

Comme les fonctions ordinaires, les fonctions membres


peuvent disposer d’arguments par défaut.

Abderrahmane ELYOUSFI ENSA (GII) C++ 12

6
17/10/2021

Les fonctions membres en ligne

Abderrahmane ELYOUSFI ENSA (GII) C++ 13

Les fonctions membres en ligne

C++ permet de définir aussi des fonctions membre en ligne.

En effet, pour rendre en ligne une fonction membre, on peut :

soit fournir directement la définition de la fonction dans la


déclaration même de la classe ; dans ce cas, le qualificatif inline
n’a pas à être utilisé ;

soit procéder comme pour une fonction ordinaire en fournissant une


définition en dehors de la déclaration de la classe ; dans ce cas,
le qualificatif inline doit apparaître à la fois devant la
déclaration et devant l’en-tête.

on placera les définitions des fonctions en ligne à la suite de la


déclaration de la classe, dans le même fichier en-tête.

Abderrahmane ELYOUSFI ENSA (GII) C++ 14

7
17/10/2021

Abderrahmane ELYOUSFI ENSA (GII) C++ 15

Abderrahmane ELYOUSFI ENSA (GII) C++ 16

8
17/10/2021

Cas des objets transmis en argument


d’une fonction membre

Abderrahmane ELYOUSFI ENSA (GII) C++ 17

Abderrahmane ELYOUSFI ENSA (GII) C++ 18

9
17/10/2021

Dans l’exemple précédent, l’objet pt était transmis


classiquement à coincide, à savoir par valeur. Précisément,
cela signifie donc que, lors de l’appel :

les valeurs des données de b sont recopiées dans un emplacement (de


type point) local à coincide (nommé pt).

En fait, en C++, n’importe quelle fonction membre d’une classe


peut accéder à n’importe quel membre (public ou privé) de
n’importe quel objet de cette classe.

Rque: On parle dans ce cas de la transmission par les valeurs.

Abderrahmane ELYOUSFI ENSA (GII) C++ 19

Mode de transmission des objets


en argument

Abderrahmane ELYOUSFI ENSA (GII) C++ 20

10
17/10/2021

Transmission par adresse d’un objet

Abderrahmane ELYOUSFI ENSA (GII) C++ 21

Pour ne pas modifier les valeurs des objets, des arguments des
fonctions, utilisés en passage par adresse, il faut utiliser le
qualificatif const.

Abderrahmane ELYOUSFI ENSA (GII) C++ 22

11
17/10/2021

Transmission par référence

Abderrahmane ELYOUSFI ENSA (GII) C++ 23

Pour ne pas modifier les valeurs des objets, des arguments des
fonctions, utilisés en passage par adresse en référence, il faut
utiliser le qualificatif const.

Abderrahmane ELYOUSFI ENSA (GII) C++ 24

12
17/10/2021

Transmission par valeur


Les problèmes posés par la transmission par valeur

L’affectation d’objets pouvait poser des problèmes dans le cas


où ces objets possédaient des pointeurs sur des emplacements
alloués dynamiquement.

Abderrahmane ELYOUSFI ENSA (GII) C++ 25

Lorsqu’une fonction renvoie un objet

Abderrahmane ELYOUSFI ENSA (GII) C++ 26

13
17/10/2021

Transmission par valeur


Les problèmes posés par la transmission par valeur

L’affectation d’objets pouvait poser des problèmes dans le cas


où ces objets possédaient des pointeurs sur des emplacements
alloués dynamiquement.

Abderrahmane ELYOUSFI ENSA (GII) C++ 27

Autoréférence : le mot clé this

Abderrahmane ELYOUSFI ENSA (GII) C++ 28

14
17/10/2021

le mot clé this

 C++ a créé le mot clé : this.


 Celui-ci, utilisable uniquement au sein d’une
fonction membre,
 Il désigne un pointeur sur l’objet l’ayant
appelée.

Abderrahmane ELYOUSFI ENSA (GII) C++ 29

Abderrahmane ELYOUSFI ENSA (GII) C++ 30

15
17/10/2021

Abderrahmane ELYOUSFI ENSA (GII) C++ 31

Les fonctions membres statiques

Abderrahmane ELYOUSFI ENSA (GII) C++ 32

16
17/10/2021

Les fonctions membres statiques

 Les classes peuvent également contenir des fonctions


membres statiques.

 Elles ont un rôle totalement indépendant d’un


quelconque objet.

 Ces fonctions ne pourront accéder qu’aux données


statiques de l’objet.

Abderrahmane ELYOUSFI ENSA (GII) C++ 33

Les fonctions membres statiques

 Ces fonctions membres statiques ne recevront pas le


pointeur sur l’objet this, comme c’est le cas pour les
autres fonctions membres.

 La fonction membre statique peut même être appelée


lorsqu’il n’existe aucun objet de sa classe.

 Dans ce cas en effet son appel ne nécessite plus que le


nom de la classe correspondante (accompagné,
naturellement, de l’opérateur de résolution de portée).

Abderrahmane ELYOUSFI ENSA (GII) C++ 34

17
17/10/2021

Abderrahmane ELYOUSFI ENSA (GII) C++ 35

Abderrahmane ELYOUSFI ENSA (GII) C++ 36

18
17/10/2021

Les fonctions membres


constantes

Abderrahmane ELYOUSFI ENSA (GII) C++ 37

Les fonctions membres constantes

 En C++, on peut aussi définir des objets constants.

 les fonctions membres constantes qui sont autorisées à faire


des opérations sur les objets constants.

 Il faut utiliser le mot const dans leur déclaration, comme


dans cet exemple de définition d’une classe point :

Abderrahmane ELYOUSFI ENSA (GII) C++ 38

19
17/10/2021

Abderrahmane ELYOUSFI ENSA (GII) C++ 39

Abderrahmane ELYOUSFI ENSA (GII) C++ 40

20
17/10/2021

Abderrahmane ELYOUSFI ENSA (GII) C++ 41

Abderrahmane ELYOUSFI ENSA (GII) C++ 42

21
17/10/2021

Les membres mutables

Abderrahmane ELYOUSFI ENSA (GII) C++ 43

Les membres mutables

 Une fonction membre constante ne peut pas modifier les


valeurs de membres non statiques.

 La norme a jugé que cette restriction pouvait parfois


s’avérer trop contraignante.

 Elle a introduit le qualificatif mutable pour désigner des


champs dont on accepte la modification, même par des
fonctions membres constantes.

Abderrahmane ELYOUSFI ENSA (GII) C++ 44

22
17/10/2021

Les membres mutables

Les membres publics déclarés avec le qualificatif mutable sont


modifiables par affectation :

Abderrahmane ELYOUSFI ENSA (GII) C++ 45

Fin

Abderrahmane ELYOUSFI ENSA3 (GII) C++ 46

23

Vous aimerez peut-être aussi