- ...
- c'est
pourquoi on parle de portée lexicale
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
- qui sera détaillée plus loin
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...nom).
-
Il ne faut pas confondre la notion de portée
avec la notion d'accès : on peut être dans la portée d'un nom sans pour autant
pouvoir y avoir accès (par exemple, en C++ pour un membre privé d'une classe); on
ne s'intéresse pas ici aux restrictions d'accès.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
- ce
qui ne pourra d'ailleurs en général pas être vérifié
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
<math.h>
- notons que sans le extern "C",
l'éditeur de liens rechercherait une fonction de nom
strcmp__FPCcPCc !
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
- seuls certains LISP ne suivent pas cette règle
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
union
- attention un
typedef ne définit pas un nouveau type mais un synonyme ; un enum
n'est pas non plus un nouveau type
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...méthodes
- la terminologie de la programmation orientée objets 'est pas
unifiée ...en smalltalk (les origines!) on parle de méthode, de messages de superclasse etc., le C++ utilise une terminologie plus traditionnelle
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...objets
- on verra cependant
que les données membres peuvent être static auquel cas elles seront
partagées par tous les objets de la classe, dans la terminologie
smalltalk, il s'agit de variables d'instances
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...devra
- c'est cette initialisation qui
définira cette donnée membre
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...temporaire
- la création
d'objets temporaires est un problème délicat. Le compilateur, peut
être amené à créer un objet temporaire ; dans ce cas, la seule chose
qui est garantie est que le constructeur de la classe sera utilisé et
l'objet sera détruit en utilisant le destructeur
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...associée
- ce qui arrivera
automatiquement si un d'entre eux devient hors de portée
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...temporaire
- un objet
temporaire peut être détruit avant d'être hors de portée, il
peut l'être dès qu'il a été copié
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...virtuels
- et de fait, le plus
souvent, ils
devraient l'être
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
a.data="bonjour"
-
delete appliqué à un pointeur nul est sans effet, mais par contre
faire un delete sur un objet qui n'a pas été alloué peut être
grave
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
- cette distinction entre héritage et usage n'est pas
toujours aussi simple, en particulier avec l'héritage multiple, on a
souvent tendance à hériter plutôt qu'utiliser ; l'héritage peut
d'ailleurs se justifier pour d'autres raisons comme par exemple la
liaison dynamique
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...base
- Notons que pour créer des constantes ce sera le seul moyen
de procéder, car une fois créée une constante ne peut être
modifiée.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...copiée
-
en fait ce qui précède ne concerne pas seulement l'affectation
mais aussi toutes les copies d'objets: affectation, passage de
valeur, retour de valeurs
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...membres
- L'interdire supposerait que nécessairement l'utilisateur d'une
classe connaisse tout le graphe d'héritage de ces ancêtres
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...généraliser)
- on verra aussi d'ailleurs qu'il s'agit d'un
problème conceptuellement différent
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...objet.
- Bien évidemment le contrôle d'accès
n'intervient pas :
même si on n'a pas
le droit d'accès
à une donnée
membre, elle existe
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...affectation
- non
surchargée !
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...base)
- il faut qu'après avoir fait pb=pc et
pc=pb pc retrouve son ancienne valeur !
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
volatile T&
-
exercice : comment distinguer entre ces types ?
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...l'utilisateur
- cette règle est générale : le C++ ne
réalisera jamais
plus d'un conversion (implicite) définie par l'utilisateur !
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...références
- ce qui contient les conversion de
classe dérivée vers classe de base
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...patrons
- il faut comprendre le terme comme
patron au sens de la couture : (Larousse)
modèle (en tissu, en papier fort etc.)
d'après lequel on taille un vêtement
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...telle
- en C++
on reste au ``premier ordre''
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...type
- le mot clé class ne signifie pas ici
qu'il s'agit d'une classe, mais de n'importe quel type défini ou non
par l'utilisateur
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...appelée
- elle peut aussi être appelée dans
d'autres cas d'erreurs liées aux exceptions
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.