...
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
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.


Mon Oct 20 14:02:48 MET 1997