méthode dessine()

méthode dessine()

par Gaëtan Emmanuel Mancini,
Number of replies: 4

Bonjour, 

J'ai deux questions concernant la méthode dessine() qu'il nous est demandé de recopier à l'identique dans toutes les sous-classes de dessinable.

Dans la donnée du projet, il est écrit que cette méthode doit être:

 virtual void dessine() override
  { support->dessine(*this); }
(Je précise qu'il ne s'agit pas ici de mon code mais du code qui nous est fourni dans la donnée)
La syntaxe -> sous-entend l'utilisation d'un pointeur. Sommes-nous ici obligé d'utiliser un pointeur pour des raisons qui dépasse ce cours (comme le fait que la méthode doit être recopiée à l'identique), ou pouvons-nous utiliser à la place une référence ?
Par ailleurs, la méthode dessine() doit-elle être définie dans toutes les sous-classes de dessinable ou bien n'est-il pas nécessaire de la définir dans une sous-classe virtuelle pure (qui possède donc elle même des sous-sous-classes dans lesquelles on redéfinit  cette méthode) qu'on ne va donc pas dessiner ?
In reply to Gaëtan Emmanuel Mancini

Re: méthode dessine()

par Josué Antoine Maechling,
1. Oui vous êtes obligés d'utiliser un pointeur dans ce cas, mais ça ne dépasse pas du tout le cours c'est juste qu'on ne peut pas faire avec une référence en fait.
Par définition un objet dessinable doit être associé à un support à dessin depuis sa création. Le seul moyen qu'on ait de garder ce lien pendant toute la durée de vie de l'objet c'est un pointeur.
Normalement rien qu'avec cela on ne devrait même pas se demander si on peut utiliser une référence, à moins que j'aie mal compris la question.

2. Vous pouvez effectivement avoir une sous classe de dessinable qui soit virtuelle pure sans avoir de redéfinition de dessine. La syntaxe à utiliser sera alors :
virtual void dessine() override = 0;
In reply to Josué Antoine Maechling

Re: méthode dessine()

par Gaëtan Emmanuel Mancini,
En fait je ne vois pas quel problème on aurait en mettant comme attribut dans la classe Dessinable une référence sur un support à dessin au lieu du pointeur. J'ai essayé de le faire pour voir et (en modifiant les constructeurs évidemment) tout compile et s'exécute comme avant(j'ai juste remplacé le -> dans la méthode dessine() par un . ). La seule chose qui pourrait poser un problème est qu'on doit déclarer le support à dessin avant de l'utiliser dans le constructeur, mais je ne vois pas trop en quoi c'est dérangeant.
In reply to Gaëtan Emmanuel Mancini

Re: méthode dessine()

par Josué Antoine Maechling,

Alors quand je dis "obligés" c'est dans le sens où vous n'avez normalement pas d'autres alternatives aussi efficaces. Si tu veux vraiment utiliser des références libre à toi mais comme tu le dis tu peux déjà avoir un problème avec la déclaration.

Conceptuellement, si cela fait du sens pour toi qu'un objet ne puisse absolument pas exister sans un support à dessin déjà créé, alors tu peux tenter de continuer comme ça.


De plus tu peux aussi te demander ce qu'il va se passer si tu as 2 support à dessins différents et que tu veux changer un objet de l'un vers l'autre...sans modifier tes support à dessins évidemment