Désolé, mais tu es obligé de définir l'opérateur de comparaison == dans la classe CForme et toutes ses sous-classes sinon impossible de savoir si deux formes ont des caractéristiques identiques.
Sinon pour l'ajout, la meilleure manière de procéder (une liste avec tous les types d'objets, n listes) dépend de la quantité d'objets CForme que tu vas manipuler.
Kaid -
kaid.fr.st-------------------------------
Réponse au message :
-------------------------------
> Voici un problème auquel je ne trouve pas de réponse, enfin, rien d'efficace.
> J'ai une classe CDessin contenant une liste chaînée (CList) de pointeurs d'objets CForme. Je voudrais ajouter une méthode Ajout(CForme *pForme), à laquelle je passerais des pointeurs vers des objets dérivés de CForme, disons CCarre, CSphere, CLigne, etc. Jusque là, rien de compliqué (liste.AddTail(pForme)).
> Mais ça se complique. Je souhaiterais NE PAS ajouter une sphère qui aurait le même centre et le même rayon qu'une autre déjà présente. Donc, dans le parcours de la liste à la recherche d'un éventuel doublon, il faut 1) ne pas se préoccuper des objets de classe différente, et 2) pour des objets de même classe, les comparer en fonctions de critères spécifiques à la classe.
> Comment faire ?
> Voici les solutions auxquelles j'ai pensé :
> - 1 liste chainée par classe + 1 méthode d'ajout par classe. Bof...
> - 1 liste chainée par classe + 1 switch sur le type de pForme*. Bof pareil...
> - 1 seule liste, et surcharger les opérateurs == pour toutes les sous-classes de CForme et en faisant toutes les combinaisons. Lourd, et d'ailleurs je ne suis pas sûr que ça puisse marcher...
> Merci d'avance pour votre aide ! J'ajoute que je suis un peu pressé...
>