Classes et objets
CHAPITRE 9
202
À titre indicatif, voici une autre version de ce même programme utilisant une gestion dynamique des objets,
et non plus une gestion par valeur. La différence porte essentiellement sur la syntaxe, au niveau de la fonction principale (la déclaration et la définition de la classe restant inchangées). La durée de vie des objets
est ici quasiment la même dans les deux cas : dans le premier exemple, il s’agissait d’objets locaux à la
fonction main, alors qu’ici il s’agit d’objets créés dynamiquement dans cette même fonction.
main()
{ Point *adp, *adq, *adr ; // adp, adq et adr sont
// des pointeurs sur un objet de type Point
adp = new Point () ;
// création dynamique d’un objet de type Point
(*adp).affiche() ;
// ou adp->affiche() ;
adq = new Point (3) ;
(*adq).affiche() ;
// ou adq->affiche() ;
(*adq).deplace (3, 6) ;
// ou adq->deplace (3, 6) ;
(*adq).affiche() ;
// ou adq->affiche() ;
adr = new Point (5, 8) ; // Création dynamique d’un autre objet de type Point
(*adr).affiche() ;
// ou adr->ffiche() ;
}
Signalons enfin qu’il est possible d’utiliser une syntaxe de définition de classe, voisine de celles des autres
langages, en fournissant directement les définitions des méthodes, comme dans ce canevas :
class Point
{ public :
Point() { abs = 0 ; ord = 0 ; }
Point (int) { abs = x ; ord = 0 ; }
.....
void deplace (int, int) { abs += dx ; ord += dy ; }
.....
private :
int abs, ord ;
} ;
Mais il faut savoir que les méthodes ainsi définies dans la déclaration de la classe sont ce que l’on nomme
des « méthodes en ligne », ce qui signifie que le compilateur peut incorporer les instructions correspondantes dans le programme, à chaque fois qu’on les appelle (on n’a donc plus affaire à un mécanisme de fonction). Il s’agit d’une technique qui optimise le temps d’exécution, au détriment de la place mémoire.
Précédent

- 225/370

Suivant